**大神部落格陣列型資料結構:
該資料結構的元素是分配在連續的記憶體中,insert和erase操作,都會使得插入點和刪除點之後的元素變動位置,所以,插入點和刪除掉之後的迭代器全部失效,也就是說insert(*iter)和erase(*iter)之後進行iter++是錯誤的。
解決方法:
erase(*iter)的返回值是下乙個有效迭代器的值
iter =cont.erase(iter);
鏈表型資料結構:
對於list型的資料結構,使用了不連續分配的記憶體,刪除運算使指向刪除位置的迭代器失效,但是不會失效其他迭代器。
解決辦法
erase(*iter)會返回下乙個有效迭代器的值
erase(iter++)
樹形資料結構:
使用紅黑樹來儲存資料,插入不會使得任何迭代器失效;刪除運算使指向刪除位置的迭代器失效,但是不會失效其他迭代器。
解決辦法
erase迭代器只是被刪元素的迭代器失效,但是返回值為void,所以要採用erase(iter++)的方式刪除迭代器。
關於迭代器失效的幾種情況
一 序列式容器迭代器失效 1 順序容器 2 對於序列式容器vector deque 當當前元素iterator刪除後 就是刪除乙個元素後 從起始位置到當前刪除位置的迭代器是正常的,其後的所有元素的迭代器都會失效,這是因為vector deque都是連續的儲存一段空間,所以當對其進行erase操作時,...
C STL 迭代器失效
2 刪除 當進行刪除操作 erase,pop back 後,指向刪除點的迭代器全部失效 指向刪除點後面的元素的迭代器也將全部失效。刪除點之前的迭代器仍有效。二 deque迭代器的失效情況 1 插入 1 在deque容器首部或者尾部插入元素不會使得任何迭代器失效。但是指向存在的元素的引用和指標不會失效...
C STL迭代器失效
迭代器失效就是說,對容器進行了一些操作後,先前的迭代器無法進行解引用操作去訪問容器的元素。迭代器失效可能會造成程式崩潰,如下圖 如果插入元素導致vector達到最大容量,那麼會重新分配記憶體並將老的元素拷貝到新的記憶體中。元素的位址都改變了,顯然迭代器和引用都將失效 如果插入元素沒有引起重新分配記憶...