思前想後還是先多鞏固基礎在去學習新的技術為好,近期會整理一些對基礎知識的總結
迭代器失效是因為向容器插入或者刪除元素導致容器的空間變化或者說是次序發生了變化,使得原迭代器變得不可用。因此在對stl迭代器進行增刪操作時,要格外注意迭代器是否失效。
下面介紹幾種常用的迭代器失效情況:
list/map/set
插入時迭代器不會失效
當刪除時,有且僅有被刪除節點的迭代器才失效
deque
首尾插入元素不會導致迭代器失效
首部和尾部刪除元素時會導致被刪除元素的迭代器失效;若是在除首尾部外的任意位置進行刪除操作,迭代器全部失效
vector
因為vector和queue這種容器屬於序列式容器,使用了連續分配的記憶體,因為插入和刪除操作很容易引起迭代器失效的情況。
插入時,當vector的容量(這裡不是size(),size()返回的是容器的大小,capacity()返回的是容器當前能夠容納的元素數量)不變時,只失效之後(iterator->end)的迭代器,否則全部失效。
刪除時,被刪除節點之後的迭代器全部失效。
後續會整理stl底層資料結構以及幾種常見容器增刪操作後的記憶體情況
STL迭代器失效情況
vector與string有以下兩種情況會使得迭代器失效 1.若新增元素時,儲存空間足夠,沒有重新分配,則end返回的迭代器失效 若儲存空間不足,重新分配空間,則全部迭代器失效。2.刪除元素時,刪除點之前的迭代器有效,之後的迭代器失效。原因 vector與string是順序儲存 占用的是一塊連續記憶...
STL迭代器失效情況總結
define crt secure no warnings include include include include include include using namespace std void stl vector test cout it cout endl cout 插在迭代器指向的...
關於迭代器失效的幾種情況
一 序列式容器迭代器失效 1 順序容器 2 對於序列式容器vector deque 當當前元素iterator刪除後 就是刪除乙個元素後 從起始位置到當前刪除位置的迭代器是正常的,其後的所有元素的迭代器都會失效,這是因為vector deque都是連續的儲存一段空間,所以當對其進行erase操作時,...