C++中的unique函数
2024-10-27 17:03:25
发布于:浙江
在C++标准库中,std::unique
函数用于移除容器(如数组或向量)中的重复元素。它属于 <algorithm>
头文件。
函数原型
template< class ForwardIt >
ForwardIt unique( ForwardIt first, ForwardIt last );
template< class ForwardIt, class BinaryPredicate >
ForwardIt unique( ForwardIt first, ForwardIt last, BinaryPredicate p );
功能
std::unique
会将相邻的重复元素移动到容器的末尾,并返回一个新的末尾迭代器(即不包含重复元素的部分的末尾)。- 需要注意的是,
std::unique
不会改变容器的大小,而是将剩余的重复元素保留在末尾。一般情况下会配合erase
操作来真正移除多余的元素。 - 使用此函数前,需要先对容器进行排序(比如使用
std::sort
),否则只能移除相邻的重复元素。
参数说明
first
:指向容器开始的迭代器。last
:指向容器结束的迭代器。BinaryPredicate
(可选):用于自定义判断条件的二元谓词函数。如果提供,自定义谓词会被用于判断相邻元素是否相等。
返回值
返回去重后不包含重复元素部分的“新末尾”迭代器。可以使用此迭代器来截断容器,达到实际去重效果。
示例代码
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 2, 3, 4, 4, 5};
// 首先对容器排序(这里可以省略,因为数据已排序)
// std::sort(vec.begin(), vec.end());
// 移除相邻重复元素
auto it = std::unique(vec.begin(), vec.end());
// 实际删除重复元素,调整容器大小
vec.erase(it, vec.end());
// 输出结果
for (int n : vec) {
std::cout << n << " ";
}
return 0;
}
输出
1 2 3 4 5
注意事项
std::unique
只会移除相邻的重复元素,所以使用前通常要先排序。- 如果需要自定义去重条件,可以提供一个谓词函数,如:
bool predicate(int a, int b) { return abs(a - b) < 5; } std::unique(vec.begin(), vec.end(), predicate);
适用场景
- 去除序列中的重复元素,比如在处理数据时删除重复值。
- 配合
std::sort
,能够快速实现无重复的序列。
使用 std::unique
可以简洁高效地处理容器中的重复数据,并保持代码简洁明了。
全部评论 1
顶
2024-10-27 来自 浙江
0
有帮助,赞一个