STL迭代器失效情況

2021-08-07 23:59:28 字數 810 閱讀 8570

vector與string有以下兩種情況會使得迭代器失效

1.若新增元素時,儲存空間足夠,沒有重新分配,則end返回的迭代器失效;若儲存空間不足,重新分配空間,則全部迭代器失效。

2.刪除元素時,刪除點之前的迭代器有效,之後的迭代器失效。

原因:vector與string是順序儲存 ,占用的是一塊連續記憶體。插入與刪除時,會導致元素移動或者重新分配空間。

deque:

插入元素會使迭代器失效。(任何位置),但是,在首位置插入元素,指向存在元素的指標和引用不會失效。

list和forw_list:

1.新增元素會使指向容器的迭代器全部失效。

2.刪除元素會導致刪除位置和刪除位置之後的迭代器失效。

map,set,multimap,multiset:

刪除當前的迭代器,僅僅會使刪除點的迭代器失效。但是,只要在erase時,遞增當前迭代即可避免此問題。

迭代器失效原因總結:

1.由於容器整體遷移,導致存放原容器元素的空間不再有效,從而使得指向原空間的迭代器失效。

2.由於刪除元素使得某些元素次序發生改變,使得原本指向某些元素的迭代器不再指向希望的元素。

3.對於關聯式容器元素的刪除,插入操作會導致指向該元素的迭代器失效,其他元素不受影響。

4.對於順序式容器元素的刪除、插入操作會導致該元素及指向該元素之後的元素的迭代器失效。

避免迭代器失效的方法:

1.當我們必須使用迭代器時,最小化要求迭代器必須保持有效的程式片段。

2.當我們每次改變容器的任何操作時,最好重新定位迭代器。

3.刪除時,利用erase會返回下乙個迭代器的位置。

STL迭代器失效情況總結

define crt secure no warnings include include include include include include using namespace std void stl vector test cout it cout endl cout 插在迭代器指向的...

常見幾種stl迭代器失效情況總結

思前想後還是先多鞏固基礎在去學習新的技術為好,近期會整理一些對基礎知識的總結 迭代器失效是因為向容器插入或者刪除元素導致容器的空間變化或者說是次序發生了變化,使得原迭代器變得不可用。因此在對stl迭代器進行增刪操作時,要格外注意迭代器是否失效。下面介紹幾種常用的迭代器失效情況 list map se...

STL迭代器失效

vector 1.當插入 push back 乙個元素後,end操作返回的迭代器肯定失效。此時first和end操作返回的迭代器都會失效。3.當進行刪除操作 erase,pop back 後,指向刪除點的迭代器全部失效 指向刪除點後面的元素的迭代器也將全部失效。deque迭代器的失效情況 1.在de...