一、unique函数
这个函数的功能就是删除相邻的重复元素,然后重新排列输入范围内的元素,并返回一个最后一个无重复值的迭代器(并不改变容器长度)。
例如:
1 vector<int>q(10); 2 for(int i = 0; i < 10; i++){ 3 q[i] = (i*i + i*i*i) % 5; 4 cout << q[i] << " "; 5 } 6 cout << endl; 7 sort(q.begin(),q.end()); 8 9 for(int i = 0; i < 10; i++)10 cout << q[i] << " ";11 cout << endl;12 13 int tot = unique(q.begin(),q.end()) - q.begin();14 15 for(int i = 0; i < 10; i++)16 cout << q[i] << " ";17 18 cout << endl;19 cout << tot << endl;
运行结果为

unique返回的是迭代器,但我们减去容器首位置就可以得到无重复的长度了。还有就是使用unique函数前得排序(或者保证容器是有序的),因为它往相邻位置查找有无重复,unique函数完全等价于下面这个函数。
1 iterator My_Unique (iterator first, iterator last){ 2 if (first==last) return last; 3 4 iterator result = first; 5 while (++first != last){ 6 if (!(*result == *first)) 7 *(++result)=*first; 8 } 9 return ++result;10 }
可以看的出unique的工作流程是吧不重复的元素往前移,并不是把重复元素往后移动,还有就是记得使用unique一定要保证有序!
知道了unique函数就可以利用这个函数做很多事情了,比如和erase函数达到删除重复元素的目的等等。
二、unique_copy
功能和unique一样,但是多了一个copy,函数有三个参数,首位置、末位置和另一个容器,例如:
1 vector<int>q(10),vec; 2 for(int i = 0; i < 10; i++){ 3 q[i] = (i*i + i*i*i) % 5; 4 cout << q[i] << " "; 5 } 6 cout << endl; 7 sort(q.begin(),q.end()); 8 9 for(int i = 0; i < 10; i++)10 cout << q[i] << " ";11 cout << endl;12 13 unique_copy(q.begin(),q.end(),back_inserter(vec));14 15 for(int i = 0; i < 10; i++)16 cout << q[i] << " ";17 cout << endl;18 19 for(vector<int>::iterator it = vec.begin(); it != vec.end(); it++){20 cout << *it << " ";21 }22 cout << endl;
运行结果为

可以发现,函数操作是拷贝到另一个容器中了,并不改变当前容器的元素顺序。
值得一提的就是unique_copy没有返回值,不能直接得出有几个不重复元素。
继续阅读与本文标签相同的文章
-
1、IT人思维之投资开篇 - IT人思维之投资
2026-05-27栏目: 教程
-
产品思维 - 产品管理系列文章
2026-05-27栏目: 教程
-
【转】11个期货短线交易技巧
2026-05-27栏目: 教程
-
【转】期货交易技巧
2026-05-27栏目: 教程
-
Windows 10的最新版1803版本ISO下载
2026-05-27栏目: 教程
