C 中容器迭代器刪除失效問題

2021-07-24 21:53:47 字數 681 閱讀 7792

c++迭代器失效問題__map/set等關聯容器如何刪除元素__vector/list/deque等序列容器如何刪除元素__迭代器如何使用  

序列性容器::(vector和list和deque) 

erase迭代器不僅使所指向被刪元素的迭代器失效,而且使被刪元素之後的所有迭代器失效,所以不能使用erase(iter++)的方式,但是erase的返回值為下乙個有效的迭代器。

所以正確方法為::

for( iter = c.begin(); iter != c.end(); )

iter = c.erase(iter);

關聯性容器::(map和set比較常用)

erase迭代器只是被刪元素的迭代器失效,但是返回值為void,所以要採用erase(iter++)的方式刪除迭代器,  

所以正確方法為::

for( iter = c.begin(); iter != c.end(); )  

c.erase(iter++);

tips:

其實對於list兩種方式都可以正常工作

stl的容器刪除元素,除了使用迭代器外,還可以使用erase(key)的方式。

size_t rm_num = obj.erase(key);

rm_num標示刪除key的成員的個數,在map中key是key值,在其他容器中,key是乙個value。

STL容器迭代器失效問題

眾所周知當使用乙個容器的insert或者erase函式通過迭代器插入或刪除元素 可能 會導致迭代器失效,因此很多建議都是讓我們獲取insert或者erase返回的迭代器,以便用重新獲取新的有效的迭代器進行正確的操作 view plaincopy to clipboardprint?iter vec....

STL容器迭代器失效問題

眾所周知當使用乙個容器的insert或者erase函式通過迭代器插入或刪除元素 可能 會導致迭代器失效,因此很多建議都是讓我們獲取insert或者erase返回的迭代器,以便用重新獲取新的有效的迭代器進行正確的操作 view plaincopy to clipboardprint?iter vec....

C 迭代器 迭代器失效問題

問題描述 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。這是劍指offer上的一道經典習題,我們首先可以想到的解決方案是 再建立乙個臨時陣列把偶數先存放起來,然後把臨時空間的...