使用erase()删除是基于元素的位置信息决定的,但是在实际应用场景中,根据元素的值来删除会显得更加直观。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void print(const vector<int>&vec)
{
for(unsigned i=0; i<vec.size(); i++)
{
cout<<vec[i]<<" ";
}
cout<<endl;
}
int main()
{
vector<int> vec;
cout<<"初始化vector"<<endl;
for(unsigned i=0; i<10; i++)
{
if(i%2==1)
{
vec.push_back(1);
}
else
{
vec.push_back(i);
}
}
print(vec);
cout<<"将vec中的1移除后把后面的元素调整到前面来"<<endl;
vector<int>::iterator firstToErase=remove(vec.begin(),vec.end(),1);
print(vec);
cout<<"将vec中多余的元素删除"<<endl;
vec.erase(firstToErase,vec.end());
print(vec);
//这里为了打印中间结果将连个函数拆开,实际应该写成
//vec.erase(remove(vec.begin(),vec.end(),1),vec.end());
return 0;
}
我们可以看到remove()有3个参数,分别界定了搜索的范围和查找的值。在打印remove()后的容器时,我们发现第一到第五个元素已经是删除1后该有的样子了,只是remove()不能移除后面不需要的元素,为此我们还需要借助erase()的帮助。remove()的返回值是指向第一个无效元素的迭代器,大多数情况下我们只需要这个迭代器和end()之间的所有无效元素就行了。最后要注意的的是,使用remove()需要包含algorithm。