vector 中 erase 用法注意事項

2021-07-15 06:27:26 字數 1276 閱讀 3292

vector::erase():從指定容器刪除指定位置的元素或某段範圍內的元素

vector::erase()方法有兩種過載形式

如下:iterator erase(   iterator _where);

iterator erase(   iterator _first,   iterator _last);

如果是刪除指定位置的元素時:

返回值是乙個迭代器,指向刪除元素下乙個元素;

如果是刪除某範圍內的元素時:返回值也表示乙個迭代器,指向最後乙個刪除元素的下乙個元素;

看下面的程式,目的是刪除陣列裡面的所有值為6的元素:

[cpp]view plain

copy

#include

#include

using

namespace

std;  

intmain()  

itor++;  

}  itor=array.begin();  

for(itor=array.begin();itor!=array.end();)  

getchar();  

return

0;  

}  

執行結果輸出1362,可見其中乙個6並未刪除,這是迭代器的問題。

原因在於erase以後,itor已經指向下乙個元素了,不應該在itor++,否則會跳過下乙個元素,即連續兩個6時跳過了第二個6. 

另外,在itor2=itor時,兩個itor是一樣的,這樣做並無意義。可修改如下:

[cpp]view plain

copy

vector<

int>::iterator itor;  

// vector::iterator itor2;

for(itor=array.begin();itor!=array.end();)  

else

}  

或者:[cpp]view plain

copy

vector<

int>::iterator itor;  

for(itor=array.begin();itor!=array.end();itor++)  

}  

也可以使用remove方法:

array.earse( remove(array.begin(), array.end(),6),  array.end() );

vector 容器erase 錯誤用法

在用vector刷題時碰到的基本出現錯誤的 如下 int main void int len sizeof num sizeof num 0 nums.assign num,num len auto iter slow nums.begin vector iterator iter nums.beg...

vector中erase()的使用

vector erase 從指定容器刪除指定位置的元素或某段範圍內的元素 vector erase 方法有兩種過載形式 如下 iterator erase iterator where iterator erase iterator first,iterator last 如果是刪除指定位置的元素時...

vector和list之erase 的用法區別

這兩種容器,由於底層不同,因此erase 的使用也會有所不同 對於vector來說,用erase 刪除其中的乙個元素後,它的迭代器會自增1,而list不會。以乙個例子來說明 要求實現 有乙個陣列a n 順序存放0 n 1,要求每隔兩個數刪掉乙個數,到末尾時迴圈至開頭繼續進行,求最後乙個被刪掉的數的原...