代码如下:
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int>v(a,a+10);
vector<int>::iterator it=remove(v.begin(),v.end(),5);
cout<<*it<<endl;//指向新终点
for(vector<int>::iterator itera=v.begin();itera!=v.end();++itera){//说明是覆盖,而不是真正意义的删除
cout<<*itera<<" ";
}
cout<<endl;
copy(v.begin(),it,ostream_iterator<int>(cout," "));
cout<<endl;
v.erase(it,v.end());//手动删除
for(vector<int>::iterator iter=v.begin();iter!=v.end();++iter){
cout<<*iter<<" ";
}
cout<<endl;
vector<int>::iterator end=remove_if(v.begin(),v.end(),not1(bind2nd(modulus<int>(),3)));
copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));//再看一次,真的不是删除,只是覆盖而已
cout<<endl;
v.erase(end,v.end());//再次进行手动删除
copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
cout<<endl;
system("pause");
return 0;
}
//remove_copy remove_copy_if
#include<iostream>
#include<string>
#include<algorithm>
#include<functional>
#include<vector>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int>v(a,a+10);
remove_copy(v.begin(),v.end(),ostream_iterator<int>(cout," "),5);//爽歪歪了,不会再出现覆盖的问题了
cout<<endl;
remove_copy_if(v.begin(),v.end(),ostream_iterator<int>(cout," "),not1(bind2nd(modulus<int>(),3)));
cout<<endl;
for(vector<int>::iterator iter=v.begin();iter!=v.end();++iter){//只是copy而已,不会改变源区间的值的。
cout<<*iter<<" ";
}
cout<<endl;
system("pause");
return 0;
}