C 迭代器失效問題

2021-08-26 12:06:30 字數 573 閱讀 8487

迭代器失效:

1、對於在記憶體中連續分布的容器(vector、queue、deque),插入或者刪除會使插入或者刪除點的迭代器以及之後的迭代器失效。

2。對於非連續儲存的容器(list,forword_list,map),插入或刪除僅僅使插入或者刪除點迭代器失效。

解決方法:

1、對於連續記憶體容器或者非連續記憶體容器,使用 iter=erase(iter)對迭代器重新賦值,erase會返回乙個有效的迭代器。

2、對於非連續記憶體容器,還可以使用乙個臨時迭代器 temp=iter; temp++; erase(iter)。

**:

#include 

#include

using

namespace

std;

int main()

; for(vector

::iterator it=a.begin();it!=a.end();)

for(auto i:a)

cout

<< i << endl;

return

0;}

C 迭代器 迭代器失效問題

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

C 迭代器失效問題

迭代器失效問題一般是指對於stl容器來說,呼叫erase某迭代器之後,就不能再使用這個iterator了。解決方法 1 erase iter 這樣可以繼續使用該iter 2 it erase iter 這是利用erase函式的返回值,一般的erase函式都會返回乙個刪除迭代器的後繼迭代器。如果是er...

c 迭代器失效問題探幽

上週做專案時遇到乙個bug,最終定位是錯誤得使用了c 迭代器導致,錯誤 如下 for auto it framecachemap.begin it framecachemap.end it 有效的迭代器或者指向某個元素,或者指向容器中尾元素的下一位置 其他所有情況都屬於無效。而使用失效的迭代器是一種...