📅  最后修改于: 2023-12-03 14:51:14.835000             🧑  作者: Mango
在C++ STL中,std::unique()
是用于在容器中去重的算法函数。它可以去除相邻的重复元素,将其压缩到容器的前端,最后返回去重后的最后一个元素的下一个位置的迭代器。
template <class ForwardIt>
ForwardIt unique(ForwardIt first, ForwardIt last);
template <class ForwardIt, class BinaryPredicate>
ForwardIt unique(ForwardIt first, ForwardIt last, BinaryPredicate p);
其中,first
和last
是所给定序列的起始和结束迭代器。
第一个重载的函数仅通过 == 运算符形成相邻元素的比较。
第二个重载的函数可以接收一个自定义的相等函数 predicate 作为可调用类型,以形成相邻元素的比较。
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> vec{1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
// 去重
auto last = std::unique(vec.begin(), vec.end());
vec.erase(last, vec.end());
// 输出
for (int i : vec) {
std::cout << i << " ";
}
}
输出:
1 2 3 4
在执行成功的范围内,每个等效 group 的第一个元素是前一个 group 的最后一个元素。
执行成功后,序列尾部的未去重序列保持未定义状态,调用 erase() 对此部分进行更改是安全的。
std::unique()
并不实际改变容器大小,需要手动通过 erase()
调整大小。
对已排序的容器执行 unique()
将保留唯一的元素,并将其移动到容器的起始处。
对于未排序的容器,unique()
并不能保证元素的之前的顺序。如果需要保留容器中的原始顺序,请先将容器排序再执行 unique()
。
std::unique()
可以用于任何 STL 容器,包括数组。
std::unique()
是一个常用的 STL 算法函数,可用于去除容器中的重复元素并将其压缩到容器的前端,从而减小容器的大小并优化代码性能。本文介绍了该函数的基本语法、示例、性质和注意事项,希望对C++程序员能有所帮助。