一、unique函数的定义和用途
1、unique函数的定义
templateForwardIterator unique(ForwardIterator first, ForwardIterator last);
2、unique函数的用途
unique函数用于去除一个区间内相邻的重复元素,并返回去重后的最后一个元素的后一个位置。
unique函数只能去除相邻的重复元素,对于不相邻的重复元素无法去重,需要配合sort函数或者stable_sort函数使用。
二、unique函数的使用方法
1、使用unique函数去除重复元素
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> vec{1, 2, 3, 4, 4, 5, 5, 6}; vec.erase(unique(vec.begin(), vec.end()), vec.end()); for (auto i : vec) { cout << i << " "; } return 0; }
上述代码将会输出"1 2 3 4 5 6",其中unique函数去除了相邻的重复元素。
2、结合sort函数使用去除不相邻的重复元素
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> vec{5, 4, 2, 3, 1, 4, 5, 6}; sort(vec.begin(), vec.end()); vec.erase(unique(vec.begin(), vec.end()), vec.end()); for (auto i : vec) { cout << i << " "; } return 0; }
上述代码将会输出"1 2 3 4 5 6",其中sort函数将vec从小到大排序,unique函数去除了全部重复元素(不相邻的重复元素也被去除了)。
三、unique函数的注意事项
1、unique函数只对相邻的重复元素生效,对于一个区间内不相邻的重复元素需要先使用sort函数排序。
2、unique函数将去重后的元素移动到了区间的最前端,需要再使用vector的erase函数删除多余的元素。
3、去重后的元素并没有被删除,而是被移动到了区间的最前端,函数返回值为去重后的最后一个元素的后一个位置。
4、unique函数只对连续的重复元素去重,对于非连续的重复元素无效。
四、unique函数的适用范围
1、unique函数适用于希望快速地去重一个区间内的相邻重复元素的场景。
2、unique函数适用于有明确排序规则的场景,对于不同的排序方式得到的结果可能有所不同。
五、unique函数的代码示例
下面是一个完整的代码示例:
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { // 1、使用unique函数去除重复元素 vector<int> vec1{1, 2, 3, 4, 4, 5, 5, 6}; vec1.erase(unique(vec1.begin(), vec1.end()), vec1.end()); for (auto i : vec1) { cout << i << " "; } cout << endl; // 2、结合sort函数使用去除不相邻的重复元素 vector<int> vec2{5, 4, 2, 3, 1, 4, 5, 6}; sort(vec2.begin(), vec2.end()); vec2.erase(unique(vec2.begin(), vec2.end()), vec2.end()); for (auto i : vec2) { cout << i << " "; } cout << endl; return 0; }