您的位置:

c++unique函数详解

一、unique函数的定义和用途

1、unique函数的定义

template 
ForwardIterator 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;
}