vector中使用erase刪除元素

2021-09-30 11:37:19 字數 796 閱讀 2720

很容易受陣列的影響,寫出如下**:

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中第...