unique 去重
返回去重之后的指针,仍然为前闭后开,可计算出去重后的元素个数m。
把一个vector去重:
int m=unique(a.begin(),a.end())-a.begin();
把一个数组去重,元素存放在下标1~n:
int m=unique(a+1,a+n+1)-(a+1);
注意:使用unique之前必须先进行一遍sort排序,否则去重会无法进行!
unique并没有将重复的元素删除,而是把重复的元素按照原来在数组中的位置放到了数组的最后面。
下面是一道unique的应用题:
首先,sort和unique函数都位于<algorithm>库中,故不要忘记写头文件。对n和数组进行定义和输入输出:
#include<iostream> #include<algorithm> using namespace std; int n,i,j; int a[105]; int main(){ cin>>n; for(i=1;i<=n;i++){ cin>>a[i]; } return 0; }
因为最后都要按顺序输出,加之unique要先排序才能去重,所以我们先sort排序。
#include<iostream> #include<algorithm> using namespace std; int n,i,j; int a[105]; int main(){ cin>>n; for(i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+n+1); return 0; }
然后我们定义一个变量m记录排序后的元素个数,并进行去重,输出m。
#include<iostream>
#include<algorithm>
using namespace std;
int n,i,j,m;
int a[105];
int main(){
cin>>n;
for(i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
m=unique(a+1,a+n+1)-(a+1);
cout<<m<<endl;
return 0;
}
最后只需要从1到m输出已排好的数即可。
完整代码:
#include<iostream> #include<algorithm> using namespace std; int n,i,j,m; int a[105]; int main(){ cin>>n; for(i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+n+1); m=unique(a+1,a+n+1)-(a+1); cout<<m<<endl; for(i=1;i<=m;i++){ cout<<a[i]<<' '; } return 0; }