STL迭代器思考

2022-05-08 06:09:12 字數 499 閱讀 9986

在遍歷stl容器類物件時進行插入和刪除操作本身即是不合理的。。。再想想,待續。。。

stl容器迭代過程中刪除元素技巧**)

序列容器的erase方法返回值是指向緊接在被刪除元素之後的元素的有效迭代器,可以根據這個返回值來安全刪除元素。

vectorc;

for(vector::iterator it = c.begin(); it != c.end();)

關聯容器的erase方法沒有返回值,被刪除的迭代器失效,所以刪除前必須確保能得到下乙個迭代器,可以用「後置遞增迭代器」技術。

mapm;

for(map::iterator it = m.begin(); it != m.end();)

m.erase得到it的乙個副本,在erase真正開始之前it已經遞增了。

所以erase得到了當前的迭代器,在erase內部工作開始之前it已經++了,正好滿足我們的需要。

只所以單獨列出來是因為以上兩種方法對list都適用,可依自己喜好選擇。

STL迭代器技術

stl迭代器技術 c stl和各種容已提供了自己的迭代器,如輸入迭代器,輸出迭代器,前向迭代器,雙向迭代器,隨機迭代器。但是 stl在已有迭代器的基礎上,仍然定義了另外一些迭代器,以簡化某些情況下的操作。一般在 stl iterator.h 檔案中提供。1 輸入流迭代器 istream iterat...

STL總結 迭代器

所有容器都定義了各自的迭代器 迭代器是乙個物件,它的工作是在容器中挑選元素,並將其呈現給迭代器使用者。迭代器分類 input迭代器 向前讀取 istream output迭代器 向前寫入 ostream forward迭代器 向前讀取和寫入 bidirectional迭代器 向前和向後讀取和寫入 l...

STL迭代器失效

vector 1.當插入 push back 乙個元素後,end操作返回的迭代器肯定失效。此時first和end操作返回的迭代器都會失效。3.當進行刪除操作 erase,pop back 後,指向刪除點的迭代器全部失效 指向刪除點後面的元素的迭代器也將全部失效。deque迭代器的失效情況 1.在de...