迭代器失效問題

2021-09-24 06:04:11 字數 859 閱讀 5137

在序列容器裡,刪除了當前的iterator 導致後邊所有元素的迭代器都會失效   增加乙個元素也會導致後邊的元素進行移動

因為vector、deque是序列容器,使用連續分配的記憶體,刪除當前元素,後邊的所有元素都會向前移動乙個位置,之後資料的位址發生了變化,之前的迭代器根據原有容器的資訊訪問不到正確的內容。

使用earse方法刪除元素的時候 erase方法會返回下乙個元素的迭代器(有效);用迭代器iterator 來接收返回後新的迭代器的值。

#if 1

#include #include #include using namespace std;

int main()

auto it = deque1.begin();

for(; it != deque1.end();)

it = deque1.begin();

for(; it != deque1.end(); ++it)

return 0;

}#endif

在關聯容器裡: set    map   multimap  multiset

刪除了當前的迭代器,會使當前的迭代器失效,因為這類容器底層使用紅黑樹實現的,紅黑樹的特點 插入、刪除節點對其他節點不會造成影響, 刪除了當前的迭代器,當前的迭代器會失效,即迭代器進行++自增操作會出現問題,所以在迭代器失效之前先對迭代器進行自增操作。

map.erase(it++);
在這個語句裡:把it自增之前的值傳遞到eraser方法裡,然後it迭代器自增,自增之後執行eraser方法,自增之前的迭代器就已經失效了。

list容器同關聯容器一樣。 是不連續的記憶體,處理迭代器失效的問題,處理方法也一樣。

迭代器失效問題

下面材料整理自internet 著作。stl中的容器按儲存方式分為兩類,一類是按以陣列形式儲存的容器 如 vector deque 另一類是以不連續的節點形式儲存的容器 如 list set map 在使用erase方法來刪除元素時,需要注意一些問題。在使用 list set 或 map遍歷刪除某些...

迭代器失效問題

在序列容器裡,刪除了當前的iterator 導致後邊所有元素的迭代器都會失效 增加乙個元素也會導致後邊的元素進行移動 因為vector deque是序列容器,使用連續分配的記憶體,刪除當前元素,後邊的所有元素都會向前移動乙個位置,之後資料的位址發生了變化,之前的迭代器根據原有容器的資訊訪問不到正確的...

C 迭代器 迭代器失效問題

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