C 迭代器失效問題

2022-05-08 21:51:12 字數 462 閱讀 2281

迭代器失效問題一般是指對於stl容器來說,呼叫erase某迭代器之後,就不能再使用這個iterator了。

解決方法:

(1):erase(iter++);這樣可以繼續使用該iter

(2):it=erase(iter);這是利用erase函式的返回值,一般的erase函式都會返回乙個刪除迭代器的後繼迭代器。

如果是erase(iter);iter++;這樣不能繼續使用iter,它已經失效了。

例子:

int

main()

;

for(auto it=p.begin();it!=p.end();)

else

}for(auto it=p.begin();it!=p.end();++it)

return0;

}

如果把p.erase(it++);改成p.erase(it);++it;就會報錯。

C 迭代器 迭代器失效問題

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

C 迭代器失效問題

迭代器失效 1 對於在記憶體中連續分布的容器 vector queue deque 插入或者刪除會使插入或者刪除點的迭代器以及之後的迭代器失效。2。對於非連續儲存的容器 list,forword list,map 插入或刪除僅僅使插入或者刪除點迭代器失效。解決方法 1 對於連續記憶體容器或者非連續記...

c 迭代器失效問題探幽

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