vector::erase():從指定容器刪除指定位置的元素或某段範圍內的元素
vector::erase()方法有兩種過載形式
如下:iterator erase( iterator _where);
iterator erase( iterator _first, iterator _last);
如果是刪除指定位置的元素時:
返回值是乙個迭代器,指向刪除元素下乙個元素;
如果是刪除某範圍內的元素時:返回值也表示乙個迭代器,指向最後乙個刪除元素的下乙個元素;
在c++primer中對c.erase(p) 這樣解釋的:
c.erase(p) 刪除迭代器p所指向的元素,返回乙個指向被刪元素之後元素的迭代器,若p指向尾元素,則返回尾後迭代器,若p是尾後迭代器,則會產生未定義行為。
如果要想遍歷乙個容器,並且刪除某個不符合要求的元素,那麼最好使用while而不是使用for。因為使用for的時候會產生某些元素被略過,因為erase之後迭代器已經指向被刪除元素的下乙個元素了!!!用for的時候還會讓迭代器自加一下,所以會直接跳到下乙個元素的下乙個元素!!即使在for中的erase之後,自減 了一下,也不是非常安全,因為如果你刪除的元素是容器的第乙個元素,那麼回退的行為將是未定義的,切記!!!!
並且使用erase的格式為:it=
arr.
erase(it
);並不是arr.
erase
(it); //在
erase
後,it失效,並不是指向
vector
的下乙個元素,it成了乙個「野指標」。
也就是說必須是對迭代器進行賦值操作!!!!
vector中使用erase刪除元素
很容易受陣列的影響,寫出如下 std vecotr iterator it vc.begin for it vc.end it 原因是vector中在刪除乙個元素後,迭代器會自動指向下乙個元素。所以,上面的 很可能導致迭代器越界。the c standard library 中解釋 c.erase ...
VC2008中Vector的erase使用
先看下面 include stdafx.h include include using namespace std int tmain int argc,tchar argv vector iterator iter ivec.begin enditer ivec.end while iter en...
vector中清除某個元素方法 erase
給乙個vector 物件,如何實現遍歷乙個刪除乙個。這個問題主要考察 vector 的erase 函式。erase 函式的宣告如下 iterator erase iterator where iterator erase iterator first,iterator last 作用 從vector...