STL中迭代器失效問題

2021-08-25 02:25:41 字數 956 閱讀 2021

對於vector、deque等連續儲存的容器來說,插入元素(insert)或者刪除元素(erase),會導致後邊的迭代器都失效,解決方法是,erase(*iter)會返回下乙個有效迭代器的值,刪除元素時用將當前迭代器賦值為erase的返回值,系統會自動將迭代器的指向修改的。

for (iter = cont.begin(); iter != cont.end();)

迭代器失效

void vectortest()

vector

::iterator iter;

for (iter = container.begin(); iter != container.end(); iter++)

for (iter = container.begin(); iter != container.end(); iter++)

vector

::iterator iter;

for (iter = container.begin(); iter != container.end(); iter++)

for (iter = container.begin(); iter != container.end(); iter++)

{cout

<<*iter《對於list型的資料結構,使用了不連續分配的記憶體,刪除運算使指向刪除位置的迭代器失效,但是不會失效其他迭代器.解決辦法兩種,erase(*iter)會返回下乙個有效迭代器的值,或者erase(iter++).

對於map,set,multimap,multiset來說, 使用紅黑樹來儲存資料,插入不會使得任何迭代器失效;刪除運算使指向刪除位置的迭代器失效,但是不會失效其他迭代器.erase迭代器只是被刪元素的迭代器失效,但是返回值為void,所以要採用erase(iter++)的方式刪除迭代器.

STL 迭代器失效問題

最近在專案開發中,遇到乙個異常,經過測試,發現是迭代器失效問題,於是稍微總結了一下。vector迭代器失效測試 測試程式 void vectortest vector int iterator iter for iter container.begin iter container.end iter...

STL容器迭代器失效問題

眾所周知當使用乙個容器的insert或者erase函式通過迭代器插入或刪除元素 可能 會導致迭代器失效,因此很多建議都是讓我們獲取insert或者erase返回的迭代器,以便用重新獲取新的有效的迭代器進行正確的操作 view plaincopy to clipboardprint?iter vec....

STL迭代器失效的問題

內部資料結構 連續儲存,例如陣列。隨機訪問每個元素,所需要的時間為常量。在末尾增加或刪除元素所需時間與元素數目無關,在中間或開頭增加或刪除元素所需時間隨元素數目呈線性變化。可動態增加或減少元素,記憶體管理自動完成,但程式設計師可以使用reserve 成員函式來管理記憶體。迭代器失效 插入 vecto...