1、remove并不是删除,仅仅是移除,要加上erase才能完成删除。
2、remove并不是删除指定位置的元素,而移除所有指定的元素。
3、用algorithm代替成员函数不是一个好的选择。
删除的方法:
2、remove并不是删除指定位置的元素,而移除所有指定的元素。
3、用algorithm代替成员函数不是一个好的选择。
删除的方法:
vec.erase(std::remove(vec.begin(),vec.end(),value),vec.end());
源码:
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
void remove_v_by_while(vector<int>& v,int val){
vector<int>::iterator ite=v.begin();
while(ite!=v.end()){
if(*ite==val)
ite=v.erase(ite);
else
++ite;
}
}
void remove_v(vector<int>& v,int val){
vector<int>::iterator ite;
for(ite=v.begin();ite!=v.end();){
if(*ite==val)
ite=v.erase(ite);
else
++ite;
}
}
void remove_v2(vector<int>& v,int val){
v.erase(std::remove(v.begin(),v.end(),val),v.end());
}
void dumpList(vector<int> g_vbak)
{
for (std::vector<int>::iterator it=g_vbak.begin();it<g_vbak.end();++it)
{
cout<<*it<<" ";
}
cout<<endl;
}
void dumpList2(vector<int> list)
{
copy(list.begin(),list.end(),ostream_iterator<int>(cout," "));
cout<<endl;
}
//http://www.cnblogs.com/xkfz007/archive/2012/08/17/2644061.html
int main(int argc, char* argv[])
{
vector<int> list ;
for(int i=0;i<15;i++)
{
list.push_back(i);
}
cout<<"============"<<endl;
dumpList(list);
for(int i=0;i<list.size();i++)
{
int data=list.at(i);
if(data==5)
{
//删除知道索引的位置
// erase the 6th element
list.erase (list.begin()+i);
// erase the first 3 elements:
// list.erase (list.begin(),list.begin()+i);
//list.erase(data);
break;
}
}
cout<<"============"<<endl;
dumpList(list);
for (std::vector<int>::iterator it=list.begin();it<list.end();++it)
{
if(*it == 2)
{
it = list.erase(it);
}
if(it == list.end())
{
break;
}
}
cout<<"============"<<endl;
dumpList(list);
remove_v2(list,10);
cout<<"============"<<endl;
dumpList2(list);
return 0;
}