去重函数 unique()
头文件
#include<algorithm>
用法
1.函数作用:
“去除”容器或数组中相邻元素之间重复出现的元素
(所以一般使用前需要排序)
2.函数参数:
第一个参数是集合的起始地址,第二个参数是集合的最后一个元素的下一个元素的地址(其实还有第三个参数,比较函数,但是几乎不用,就不说了,其实和sort函数很像)。
int a[5]={1,4,2,7,2};
sort(a,a+5);
unique(a,a+5);
去重后不相同元素的个数:就是函数返回值减去集合的初始位置。
int len=unique(a,a+5)-a;//去重后不相同元素的个数
1.这里的删除不是真的delete,而是将重复的元素放到容器末尾
2.一定要先对数组进行排序才可以使用unique函数
3.unique函数的返回值是去重之后的尾地址
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
int main()
{
int a[] = { 10,20,20,20,30,30,20,20,10};
int n = unique(a, a + 9) - a;
//“去除”容器或数组中相邻元素之间重复出现的元素
for(int i = 0; i<n; i++)
cout<<a[i]<<' ';//10 20 30 20 10
cout<<endl;
//排序后去重
sort(a,a+9);
int m = unique(a,a+9)-a;
for(int i = 0; i<m; i++)
cout<<a[i]<<' ';//10 20 30
return 0;
}
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
int main()
{
int a[] = { 10,20,20,20,30,30,20,20,10 };
vector<int> v(a, a + 9);
cout << "去重前" << endl;
for (int i = 0; i < 9; i++)
cout << a[i] << " ";
cout << endl;
sort(v.begin(), v.end());//排序
vector<int>::iterator it;
it = unique(v.begin(), v.end()); // 10 20 30 20 10
v.resize(distance(v.begin(), it)); // 10 20 30 20 10
cout << "去重后" << endl;
for (it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
return 0;
}