STL容器迭代過程中刪除元素技巧

2022-07-15 08:57:15 字數 723 閱讀 6049

1.連續記憶體序列容器(vector,string,deque)

序列容器的

erase

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

vectorc;

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

2.關聯容器(set,multiset,map,multimap)

關聯容器的

erase

方法沒有返回值,被刪除的迭代器失效,所以刪除前必須確保能得到下乙個迭代器,可以用

「後置遞增迭代器

」技術。

mapm;

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

m.erase

得到it

的乙個副本,在

erase

真正開始之前

it已經遞增了。

所以erase

得到了當前的迭代器,在

erase

內部工作開始之前

it已經

++了,正好滿足我們的需要。

3.非連續記憶體序列容器(list)

只所以單獨列出來是因為以上兩種方法對

list

都適用,可依自己喜好選擇。

STL容器之刪除元素,迭代器失效

一.種類 值得注意的是,陣列可以和stl演算法配合,因為指標可以當作陣列的迭代器使用。二.刪除元素 如果想刪除東西,記住remove演算法後,要加上erase 所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為remove並不知道它現在作用於哪個容器,所以remove演算法不可能真的刪除...

STL容器之刪除元素,迭代器失效

部落格 一.種類 值得注意的是,陣列可以和stl演算法配合,因為指標可以當作陣列的迭代器使用。二.刪除元素 如果想刪除東西,記住remove演算法後,要加上erase 所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為remove並不知道它現在作用於哪個容器,所以remove演算法不可能...

STL容器 刪除元素,迭代器失效,選擇時機

一.種類 值得注意的是,陣列可以和 stl演算法配合,因為指標可以當作陣列的迭代器使用。二.刪除元素 如果想刪除東西,記住 remove 演算法後,要加上 erase 所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為 remove 並不知道它現在作用於哪個容器,所以 remove 演算...