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上的一道經典習題,我們首先可以想到的解決方案是 再建立乙個臨時陣列把偶數先存放起來,然後把臨時空間的...