remove是一個函數,頭文件是algorithm;
erase是每個容器的成員函數。
在介紹之前先介紹v.begin()和v.end():
v.begin()指的是第一個元素;
v.end()值得最後一個元素的下一個位置;
vector<int>::iterator it;
it=remove(v.begin(),v.end(),4);//刪除值爲4的元素。每刪除一個,後面的往前賦值覆蓋移動
//返回值爲刪除完的vector的下一個無效元素。
//迭代器可以繼續往後訪問
//刪除操作結束,v.size()不變。也就是說其實後面的元素沒有完全刪除。
例外情況:list中的成員函數list.remove是真的刪除,類似接下來介紹的erase。
v.erase(v.begin(),v.end());//完全刪除所有元素;
v.erase(pos);//刪除某一個元素,返回值爲下一個元素的地址。
for(it=v.begin(); it!=v.end(); it++){
if( *iter == 3)
v.erase(it);
}
//本段代碼本意是刪除vector中值爲3的元素,但是代碼錯誤。erase把 it刪除了,it成爲野指針,所以出錯。
for(it=v.begin(); it!=v.end(); it++)
{
if( *it == 3) {
it = v.erase(it);
}
}//無法刪除連續的2個3
for(it=v.begin(); it!=v.end(); )
{
if( *it == 3) {
it = v.erase(it);
} else {
++it;
}
}
remove和erase聯合使用:
v.erase(remove(v.begin(),v.end(),3),v.end);