STL之迭代器失效

2021-07-01 23:44:27 字數 413 閱讀 6442

所謂迭代器失效,是指迭代器已經不是指向原來的位置,這總是出現在需要連續儲存的容器中,如:vector,deque,string。

拿vector來說,當需要插入或者刪除元素時,如果原來的容量(capacity)不足以滿足插入的需求,則必須重新分配一塊記憶體,然後將vector物件中所有元素都搬新家,這必然會導致所有元素的迭代器都會發生變化(即原來迭代器失效)。這和動態陣列是一樣的。

例如:#include #include using namespace std;

int main()

; int i=0;

vector::iterator beg=a.begin(),end=a.end();

for( ;(beg+i)!=end; i++)

cout<<*beg+i<<" ";

cout<

STL迭代器失效

vector 1.當插入 push back 乙個元素後,end操作返回的迭代器肯定失效。此時first和end操作返回的迭代器都會失效。3.當進行刪除操作 erase,pop back 後,指向刪除點的迭代器全部失效 指向刪除點後面的元素的迭代器也將全部失效。deque迭代器的失效情況 1.在de...

STL 迭代器失效

迭代器失效 指向不再存在的元素的迭代器。無效迭代器的使用未定義,可能會導致嚴重的執行錯誤。眾所周知當使用乙個容器的insert或者erase函式通過迭代器插入或刪除元素 可能 會導致迭代器失效,因此很多建議都是讓我們獲取insert或者erase返回的迭代器,以便用重新獲取新的有效的迭代器進行正確的...

stl 迭代器失效

1 對於基於連續記憶體的容器,容器元素的增刪,有可能會導致迭代器的失效。考慮 int main int argc,char ar 2 通過memory可以記憶體的變化,刪除之前是 1 2 3 刪除之後是2 3,刪除iter1會導致迭代器iter2和ri失效。迭代器和引用,底層都是指標,刪除iter1...