std::unique 函数介绍

501 阅读2分钟

std::unique 是 C++ 标准模板库(STL)中的一个常用函数,其主要功能是去除容器或数组中相邻元素的重复项。以下是关于 std::unique 的一些重要信息:

功能与用法

  • 功能:去除容器或数组中相邻元素之间的重复项。需要注意的是,这里的“去除”并不是真正意义上的删除,而是将重复的元素移动到容器的末尾,并返回去重后容器的新末尾地址。
  • 用法:在使用 std::unique 函数之前,通常需要对目标序列进行排序,因为 std::unique 只能去除相邻的重复元素。

函数原型

std::unique 有以下两种原型:

  1. iterator unique(iterator it1, iterator it2);

    • 这是最常用的形式,其中 it1 和 it2 是迭代器,表示对容器中 [it1, it2) 范围内的元素进行去重。返回值是一个迭代器,指向去重后容器中不重复序列的最后一个元素的下一个元素。
  2. iterator unique(iterator it1, iterator it2, bool MyFunc);

    • 这个版本较少使用,其中 MyFunc 是一个自定义的比较函数,用于确定两个元素是否相等。

使用示例

以下是一个使用 std::unique 的简单示例:

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> a = {1, 4, 2, 7, 2};
    std::sort(a.begin(), a.end());  // 先排序
    auto it = std::unique(a.begin(), a.end());  // 去重
    a.resize(std::distance(a.begin(), it));  // 调整数组大小
    for (int i : a) {
        std::cout << i << " ";
    }
    return 0;
}

在这个例子中,数组 a 在去重后会变成 {1, 2, 4, 7}

注意事项

  • std::unique 只能去除相邻的重复元素,因此如果数组未排序,可能无法达到预期的去重效果。
  • 使用 std::unique 后,通常需要调整容器的大小以匹配新的逻辑大小,可以使用 std::vector::resize 方法。