std::unique 是 C++ 标准模板库(STL)中的一个常用函数,其主要功能是去除容器或数组中相邻元素的重复项。以下是关于 std::unique 的一些重要信息:
功能与用法
- 功能:去除容器或数组中相邻元素之间的重复项。需要注意的是,这里的“去除”并不是真正意义上的删除,而是将重复的元素移动到容器的末尾,并返回去重后容器的新末尾地址。
- 用法:在使用
std::unique函数之前,通常需要对目标序列进行排序,因为std::unique只能去除相邻的重复元素。
函数原型
std::unique 有以下两种原型:
-
iterator unique(iterator it1, iterator it2);- 这是最常用的形式,其中
it1和it2是迭代器,表示对容器中[it1, it2)范围内的元素进行去重。返回值是一个迭代器,指向去重后容器中不重复序列的最后一个元素的下一个元素。
- 这是最常用的形式,其中
-
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方法。