很容易受陣列的影響,寫出如下**:
std::vecotr::iterator it = vc.begin();
for( ; it != vc.end(); it++ )
原因是vector中在刪除乙個元素後,迭代器會自動指向下乙個元素。所以,上面的**很可能導致迭代器越界。
《the c++ standard library》中解釋:
c.erase(pos)
removes the element at iterator position pos
and returns the position of the next element
所以,正確做法應該是:
for( ; it != vc.end(); )
else
} 問題又來了,上面的**在c++ builder 6.0 、mingw32 2.95下編譯執行完全正常,但vc下面同樣會出錯(visual studio 2008),在erase後,it失效,並不是指向vector的下乙個元素,it成了乙個「野指標」。
例子:
#include "iostream"
#include "vector"
using namespace std;
int
main()
else
}cout << "after remove 8:\n";
for(vector::iterator it = arr.begin(); it < arr.end(); ++it)
cout << endl;
}**:
vector中erase()的使用
vector erase 從指定容器刪除指定位置的元素或某段範圍內的元素 vector erase 方法有兩種過載形式 如下 iterator erase iterator where iterator erase iterator first,iterator last 如果是刪除指定位置的元素時...
vector呼叫erase刪除元素
for std vector iterator iter g vecdownloadinfos.begin iter g vecdownloadinfos.end else pop back 只刪除最後乙個元素,而erase可以刪掉乙個由iterator指出的元素,也可刪掉乙個範圍的元素 remov...
list中使用erase迭代器失效
當list使用erase時,會使當前被刪除元素的迭代器失效,如何解決這一問題。看c primer中是採取以下第一種方法 1 for list iterator iter l.begin iter l.end iter 在寫測試程式時,發現該種方法會有bug,即當我剛好滿足條件需刪去的值為list中第...