對於順序容器,對其新增或者刪除元素,會有迭代器失效的情況。
首先是erase,刪除的情況。
假如刪除了,進行it++;是肯定會報錯的;對於erase,會返回下乙個迭代器,避免失效。
iter =cont.erase(iter);
關聯容器, 只需要
map::iterator tmpiter = iter;
iter++;
datamap.erase(tmpiter);
神奇的是,erase函式沒有對輸入的position進行改寫
對於insert,要是引起擴容,則迭代器完全失效。
建議,不要用迭代器進行insert操作。
還不是很明白,希望以後能補充。
有關vector的迭代器失效問題
什麼是迭代器失效 在vector中因為插入 刪除的操作,導致vector的空間發生改變,讓其指向的那個位置的含義已經改變 可能原位置的空間已經被釋放,也可能原位置的資料變成其原來相鄰位置上的資料 從而導致iterator失效,因為每個容器的迭代器底層實現不同,所以導致它們失效的原因也不同,並不能因為...
C 迭代器 迭代器失效問題
問題描述 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。這是劍指offer上的一道經典習題,我們首先可以想到的解決方案是 再建立乙個臨時陣列把偶數先存放起來,然後把臨時空間的...
C 迭代器失效問題
迭代器失效 1 對於在記憶體中連續分布的容器 vector queue deque 插入或者刪除會使插入或者刪除點的迭代器以及之後的迭代器失效。2。對於非連續儲存的容器 list,forword list,map 插入或刪除僅僅使插入或者刪除點迭代器失效。解決方法 1 對於連續記憶體容器或者非連續記...