unique 去重 返回一个指向去重后范围的尾后迭代器。
时间复杂度O(n) 头文件[HTML_REMOVED]
第一个参数指向要去重的第一个元素的迭代器,第二个参数指向要去重的最后一个元素的下一个位置的迭代器。
unique 只能删除相邻形同元素,所以使用前常常要将元素排序。
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int a[6] = {1, 2, 3, 3, 2, 5};
sort(a, a + 6);
int n = unique (a, a + 6) - a; // 求去重后有几个元素
for (int i = 0; i < n; i ++) cout << a[i] << ' ';
return 0;
}
unique和erase搭配使用
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 3, 4, 2, 5, 5, 6, 6, 7};
sort (v.begin(), v.end());
auto it = unique (v.begin(), v.end());
v.erase(it, v.end()); //重复的元素未被删除而是移到了后面,用erase函数
for (int i : v) cout << i << ' ';
return 0;
}
手写unique()
vector <int> :: iterator unique(vector<int> &a) //默认a已排序
{
int j = 0;
for (int i = 0; i < a.size())
if (!i || a[i] != a[i - 1]) //a[i]不为第1个元素
a[j ++] = a[i];
//a[0] ~ a[j - 1] 存了所有a中不重复的数
return a.begin() + j;
}