STL原始碼分析 迭代器失效小結

2021-10-07 18:58:34 字數 683 閱讀 8957

在c++primer一書中是這樣限定的:

1、在deque容器首部或者尾部插入元素不會使得任何迭代器失效。

2、在其首部或尾部刪除元素則只會使指向被刪除元素的迭代器失效。

3、在deque容器的任何其他位置的插入和刪除操作將使指向該容器元素的所有迭代器失效。但是:我在vs2005測試發現第一條都不滿足,不知為何?等以後深入stl以後慢慢的領會吧!

只有list的迭代器好像很少情況下會失效。也許就只是在刪除的時候,指向被刪除節點的迭代器會失效吧,其他的還沒有發現。

先看兩條規制

1、對於節點式容器(map, list, set)元素的刪除,插入操作會導致指向該元素的迭代器失效,其他元素迭代器不受影響。

2、對於順序式容器(vector)元素的刪除、插入操作會導致指向該元素以及後面的元素的迭代器失效。

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

**如下:

iter = vec.

insert

(iter)

;iter = vec.

erase

(iter)

;

STL原始碼剖析 迭代器失效小結

deque迭代器的失效情況 在c primer一書中是這樣限定的 1 在deque容器首部或者尾部插入元素不會使得任何迭代器失效。2 在其首部或尾部刪除元素則只會使指向被刪除元素的迭代器失效。3 在deque容器的任何其他位置的插入和刪除操作將使指向該容器元素的所有迭代器失效。但是 我在vs2005...

STL原始碼剖析 迭代器失效小結

deque迭代器的失效情況 在c primer一書中是這樣限定的 1 在deque容器首部或者尾部插入元素不會使得任何迭代器失效。2 在其首部或尾部刪除元素則只會使指向被刪除元素的迭代器失效。3 在deque容器的任何其他位置的插入和刪除操作將使指向該容器元素的所有迭代器失效。但是 我在vs2005...

STL原始碼剖析 迭代器失效小結

deque迭代器的失效情況 在c primer一書中是這樣限定的 1 在deque容器首部或者尾部插入元素不會使得任何迭代器失效。2 在其首部或尾部刪除元素則只會使指向被刪除元素的迭代器失效。3 在deque容器的任何其他位置的插入和刪除操作將使指向該容器元素的所有迭代器失效。但是 我在vs2005...