C STL 迭代器失效

2021-07-09 01:27:47 字數 664 閱讀 3988

2、刪除:

當進行刪除操作(erase,pop_back)後,指向刪除點的迭代器全部失效;指向刪除點後面的元素的迭代器也將全部失效。刪除點之前的迭代器仍有效。

(二)deque迭代器的失效情況:

1、插入:

1)在deque容器首部或者尾部插入元素不會使得任何迭代器失效。 但是指向存在的元素的引用和指標不會失效。

2)在deque容器的任何其他位置的插入將使指向該容器元素的所有迭代器、引用和指標失效。

2、刪除:

1)在其首部刪除元素則只會使指向被刪除元素的迭代器失效,其他不收影響。

2)在其尾部刪除元素則被刪除元素的迭代器和後迭代器會失效,其他不收影響。

3)在deque容器的除首尾外任何其他位置刪除將使指向該容器元素的所有迭代器、引用和指標失效。

(三)list迭代器的失效情況:

1、插入:

任何位置插入,都不受影響

2、刪除:

除了被刪除元素,指向其它位置的迭代器(包括尾後迭代器和首前迭代器)、引用和指標仍有效。

建議:凡是使用了迭代器的迴圈體,都不要向迭代器所屬的容器新增元素。(迭代器可能會失效!!!!)

《二》關聯容器

1、插入:不會使迭代器失效

2、刪除:如果迭代器所指向的元素被刪除,則該迭代器失效。

C STL迭代器失效

迭代器失效就是說,對容器進行了一些操作後,先前的迭代器無法進行解引用操作去訪問容器的元素。迭代器失效可能會造成程式崩潰,如下圖 如果插入元素導致vector達到最大容量,那麼會重新分配記憶體並將老的元素拷貝到新的記憶體中。元素的位址都改變了,顯然迭代器和引用都將失效 如果插入元素沒有引起重新分配記憶...

C STL 迭代器失效問題

之前看 c primier 的時候,也解到在順序型視窗裡insert erase會涉及到迭代器失效的問題,並沒有深究。今天寫程式的時候遇到了這個問題。最初我的程式是醬紫的,別說話,我知道這樣是有問題的,可這樣是最直觀的想法 int arr vector int a arr,arr sizeof ar...

C STL容器迭代器失效 筆記

迭代器是封裝了指標 過載了 等操作符的類模板,具有類似指標的行為。迭代器的設計是對資料結構的泛化,使不同容器具有相同的訪問方式,讓 不必依賴於特定的資料結構。指標也可以狹義的理解為迭代器。在c 中經常使用迭代器對stl容器進行操作,但很多同學沒怎麼關注過迭代器失效的問題。迭代器失效,指迭代器指向錯誤...