我們在使用stl底層給我們提供的一些容器的時候,當我們給乙個容器中增加(insert)或刪除(erase),最有可能出現迭代器失效。
在對容器進行操作的時候,由於一些操作,使得元素儲存的位置發生改變,從而使得對指向原來位置的迭代器操作時發生錯誤。
例如
vector容器
解決辦法:
在出現迭代器失效的位置重新獲取一下迭代器。
//arr為乙個vector物件,刪除元素num
for(
auto
&it:arr)
}
list
由於list底層是乙個帶頭節點的雙向鍊錶,所以不會出現擴容,因此list迭代器失效的主要場景是刪除(earse)操作。
解決辦法
重新獲取新的迭代器。
it = li.erase(it);
C STL 迭代器失效
2 刪除 當進行刪除操作 erase,pop back 後,指向刪除點的迭代器全部失效 指向刪除點後面的元素的迭代器也將全部失效。刪除點之前的迭代器仍有效。二 deque迭代器的失效情況 1 插入 1 在deque容器首部或者尾部插入元素不會使得任何迭代器失效。但是指向存在的元素的引用和指標不會失效...
C STL迭代器失效
迭代器失效就是說,對容器進行了一些操作後,先前的迭代器無法進行解引用操作去訪問容器的元素。迭代器失效可能會造成程式崩潰,如下圖 如果插入元素導致vector達到最大容量,那麼會重新分配記憶體並將老的元素拷貝到新的記憶體中。元素的位址都改變了,顯然迭代器和引用都將失效 如果插入元素沒有引起重新分配記憶...
C STL中迭代器失效問題
其實,在我們學習過程中,c stl使我們必須要用的乙個庫,裡面整合了很多的資料結構和演算法,這些在我們寫程式的時候,用的特別多。但是,使用這些,我們經常會出現一些問題,畢竟c 中記憶體的申請和釋放都是程式設計師親自去做的,所以說,在使用stl的時候,我們也會遇到很多問題,其中乙個就是我們所謂的迭代器...