1.關聯容器刪除乙個迭代器對其他迭代器不會造成影響,返回的是void型。
2.序列容器刪除乙個迭代器後會造成後面的所有迭代器都往前移動乙個位置,因此先前儲存的迭代器都會失效,返回的是被刪除後新複製到被刪除位置的元素的迭代器。
c++中利用迭代器刪除元素會發生什麼?
(1)對於關聯容器(如map,set,multimap,multiset),刪除當前的iterator,僅僅會使當前的iterator失效,只要在erase時,遞增當前的iterator即可。這是因為map之類的容器,使用了紅黑樹來實現,插入,刪除乙個結點不會對其他結點造成影響。使用方式如下例子:
[cpp]view plain
copy
set<
int> valset = ;
set>::iterator iter;
for(iter = valset.begin(); iter != valset.end(); )
因為傳給erase的是iter的乙個副本,iter++是下乙個有效的迭代器。
(2)對於序列式容器(如vector,deque,
list等
),刪除當前的iterator會使後面所有元素的iterator都失效。這是因為vector,deque使用了連續分配的記憶體,刪除乙個元素導致後面所有的元素會向前移動乙個位置。不過erase方法可以返回下乙個有效的iterator。使用方式如下,例如:
[cpp]view plain
copy
vector<
int> val = ;
vector>::iterator iter;
for(iter = val.begin(); iter != val.end(); )
STL容器之刪除元素,迭代器失效
一.種類 值得注意的是,陣列可以和stl演算法配合,因為指標可以當作陣列的迭代器使用。二.刪除元素 如果想刪除東西,記住remove演算法後,要加上erase 所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為remove並不知道它現在作用於哪個容器,所以remove演算法不可能真的刪除...
STL容器之刪除元素,迭代器失效
部落格 一.種類 值得注意的是,陣列可以和stl演算法配合,因為指標可以當作陣列的迭代器使用。二.刪除元素 如果想刪除東西,記住remove演算法後,要加上erase 所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為remove並不知道它現在作用於哪個容器,所以remove演算法不可能...
STL迭代器技術
stl迭代器技術 c stl和各種容已提供了自己的迭代器,如輸入迭代器,輸出迭代器,前向迭代器,雙向迭代器,隨機迭代器。但是 stl在已有迭代器的基礎上,仍然定義了另外一些迭代器,以簡化某些情況下的操作。一般在 stl iterator.h 檔案中提供。1 輸入流迭代器 istream iterat...