常見幾種stl迭代器失效情況總結

思前想後還是先多鞏固基礎在去學習新的技術爲好,近期會整理一些對基礎知識的總結

迭代器失效是因爲向容器插入或者刪除元素導致容器的空間變化或者說是次序發生了變化,使得原迭代器變得不可用。因此在對stl迭代器進行增刪操作時,要格外注意迭代器是否失效。

下面介紹幾種常用的迭代器失效情況:
list/map/set
插入時迭代器不會失效
當刪除時,有且僅有被刪除節點的迭代器才失效

deque
首尾插入元素不會導致迭代器失效
首部和尾部刪除元素時會導致被刪除元素的迭代器失效;若是在除首尾部外的任意位置進行刪除操作,迭代器全部失效

vector
因爲vector和queue這種容器屬於序列式容器,使用了連續分配的內存,因爲插入和刪除操作很容易引起迭代器失效的情況。
插入時,當vector的容量(這裏不是size(),size()返回的是容器的大小,capacity()返回的是容器當前能夠容納的元素數量)不變時,只失效之後(iterator->end)的迭代器,否則全部失效。
刪除時,被刪除節點之後的迭代器全部失效。

後續會整理stl底層數據結構以及幾種常見容器增刪操作後的內存情況

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章