[問題] STL裡list的iterator

看板C_and_CPP作者 (小盜)時間15年前 (2010/07/17 19:02), 編輯推噓8(805)
留言13則, 9人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 我在網路上找的iterator的範例幾乎長這樣的 list<char>::iterator it; for( it = my_list.begin(); it != my_list.end(); ++it ) { cout << *it; } 想知道有沒有方法不用讓他一直跑迴圈,直接取用list內的東西,例如像這樣的 it = it + sizeof(list<char>) * n (我很天真地打過這行 XD) 總之就是可以像陣列 array[2] 這樣直接用他的值。 PS. 這行compiler結果是error: no match for 'operator+' in 'it + 32ul' 開發平台: Linux -- ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 編輯: chenroseyaks 來自: 140.123.22.26 (07/17 19:03)

07/17 19:07, , 1F
你想想看LinkList的特點就知道了
07/17 19:07, 1F

07/17 19:14, , 2F
想直接存取的話,你可以考慮改用vector
07/17 19:14, 2F

07/17 19:16, , 3F
你想快速的隨機存取就用vector
07/17 19:16, 3F

07/17 19:17, , 4F
想快速的insert/erase或搬動整個block就用list
07/17 19:17, 4F

07/17 19:17, , 5F
有一好沒二好,這是container背後的資料結構的問題
07/17 19:17, 5F

07/17 19:26, , 6F
advance 可以達成你的要求, 不過時間複雜度是線性的
07/17 19:26, 6F

07/17 22:32, , 7F
www.sgi.com/tech/stl/RandomAccessContainer.html
07/17 22:32, 7F

07/17 23:05, , 8F
謝謝,我再試試看
07/17 23:05, 8F

07/18 00:28, , 9F
可以用 std::advance(it, n);
07/18 00:28, 9F

07/19 00:18, , 10F
可以寫個物件繼承List再自己重載撰寫operator[]
07/19 00:18, 10F

07/19 00:18, , 11F
不過時間依然是線性的 只是code寫起來比較爽
07/19 00:18, 11F

07/19 00:19, , 12F
回樓上, 你沒有考慮到 public 繼承帶來的問題
07/19 00:19, 12F

07/19 00:23, , 13F
最好不要public繼承STL...
07/19 00:23, 13F
文章代碼(AID): #1CGOt0QV (C_and_CPP)