c 容器迭代器問題

2021-08-07 10:40:49 字數 1011 閱讀 2986

一:迭代器失效問題

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

對於順序式容器(vector,string)元素的插入肯定會導致指向該元素以及後面的元素迭代器,指標,引用失效,有可能會導致所有迭代器,指標,引用失效。取決於vector插入時預留的額外儲存空間是否夠用,需不需要重新分配新的儲存空間,把原來儲存在舊空間的元素全部複製到新的儲存空間然後再插入新的元素,最後撤銷舊的儲存空間。但刪除元素時,尾後迭代器總是失效,被刪元素之前的迭代器,引用和指標仍有效

deque 插入到除首尾位置之外的任何位置都會導致迭代器,指標,和引用失效,如果是在首尾位置新增元素,迭代器會失效,但指向存在的元素的引用和指標不會失效。

在首尾之外的任何位置刪除元素,那麼指向被刪除元素外的其他元素的迭代器,引用和指標都會失效,如果刪除的是尾元素,尾後迭代器也會失效,但其他迭代器,引用和指標不受到影響,如果是刪除首元素。這些也不會受到影響

最保險的方式是,當使用乙個容器的insert或者erase函式通過迭代器插入或刪除元素時,獲取insert和erase返回的指向下乙個元素的迭代器,以便用來重新獲取新的有效的迭代器

erase返回的迭代器已經指向下乙個元素,呼叫insert後,需要遞增迭代器2次,在給定位置之前插入新元素,返回指向新插入的元素的迭代器

不要儲存end返回的迭代器,必要時候重新呼叫end方法

#include#includeusing namespace std;

int main()

else

} itor=array.begin();

for(itor=array.begin();itor!=array.end();)

system("pause");

return 0;

}

二:函式返回迭代器

迭代器本質就是指標,*ite 和 ite->second 都返回迭代器iter所指元素的引用

c 容器演算法迭代器初識 容器演算法迭代器

c 容器演算法迭代器初識 容器演算法迭代器 stl中最常用的為迭代器vector,可以理解為陣列,下面我們將學習如何向這個容器 中插入資料 並遍歷這個容器 容器 vector 演算法 for each 迭代器 vector iteator include include include using ...

C 中容器迭代器刪除失效問題

c 迭代器失效問題 map set等關聯容器如何刪除元素 vector list deque等序列容器如何刪除元素 迭代器如何使用 序列性容器 vector和list和deque erase迭代器不僅使所指向被刪元素的迭代器失效,而且使被刪元素之後的所有迭代器失效,所以不能使用erase iter ...

容器 迭代器

stl包括 容器 資料結構 迭代器 遍歷資料 演算法 順序容器 vector 向量 list 鍊錶 deque 雙端佇列 關聯容器 set 集合 multist map 對映 multimap 迭代器 類似於指標 用來訪問容器中的單個資料項 迭代器由類iterator來宣告。include incl...