C STL中迭代器失效的總結

2021-10-06 04:14:29 字數 518 閱讀 6928

我們在使用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的時候,我們也會遇到很多問題,其中乙個就是我們所謂的迭代器...