代码如下:
//unique,unique_if
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
int main(){
int a[]={1,2,3,4,5,1,2,3,4,5};
vector<int>v(a,a+10);
vector<int>vv(a,a+10);
//unique是用来删除连续重复的元素的,所以调用之前一定要先排序
sort(v.begin(),v.end());
vector<int>::iterator it=unique(v.begin(),v.end());//只是把重复的元素放在后面 而没有删除,这个时候试着去手动删除
copy(v.begin(),v.end(),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;
sort(vv.begin(),vv.end());
vector<int>::iterator vit=unique(vv.begin(),vv.end(),less<int>());
copy(vv.begin(),vv.end(),ostream_iterator<int>(cout," "));
cout<<endl;
vv.erase(vit,vv.end());
for(vector<int>::iterator itera=vv.begin();itera!=vv.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
system("pause");
return 0;
}
//unique_copy
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
bool xiangchayi(int a,int b){
return a+1==b||a-1==b;
}
int main(){
int a[]={1,2,3,4,5,1,2,3,4,5};
vector<int>v(a,a+10);
vector<int>vv(a,a+10);
sort(v.begin(),v.end());
unique_copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
cout<<endl;
sort(vv.begin(),vv.end());
unique_copy(vv.begin(),vv.end(),ostream_iterator<int>(cout," "),xiangchayi);
cout<<endl;
system("pause");
return 0;
}
#include<iostream>
#include<algorithm>
#include<functional>
#include<string>
using namespace std;
bool bothspace(char a,char b){
return a==' '&&b==' ';//连续两个空格的时候 返回真
}
int main(){
cin.unsetf(ios::skipws);
unique_copy(istream_iterator<char>(cin),istream_iterator<char>(),ostream_iterator<char>(cout),bothspace);
system("pause");
return 0;
}