答案:std::unique用于去除容器中连续重复元素,需先排序并配合erase使用。

在C++ STL中,unique 方法用于去除容器中连续重复的元素,但它并不会自动对整个容器排序或删除所有重复值。它只移除相邻的重复项,因此通常需要先排序才能实现“全局去重”。
基本用法与原理
std::unique 是定义在
常见用法如下:
// 示例:vector 去重 #include自定义类型或条件去重
std::unique 支持传入自定义的比较函数,用于判断两个元素是否“相等”。比如,对字符串忽略大小写去重,或对结构体按某个字段判断。
立即学习“C++免费学习笔记(深入)”;
// 示例:按绝对值去重 std::vector此时结果可能为 {-1, 2, 3} 或 {1, -2, 3} 等,取决于排序和原始顺序。
适用于哪些容器?
std::unique 要求迭代器是双向迭代器,因此适用于:
- std::vector
- std::deque
- std::array
- std::list(但 list 更推荐使用成员函数 unique)
注意:std::list 和 std::forward_list 提供了成员函数 list::unique(),可以直接使用,且支持自定义比较。
std::list注意事项
使用 unique 时容易犯的错误:
- 忘记排序,导致非连续重复未被去除
- 忘记调用 erase,容器大小未变,残留无效数据
- 在未排序的序列中误以为能全局去重
std::unique 的时间复杂度是 O(n),前提是元素已排序。比较次数为 n-1 次。
基本上就这些。掌握 sort + unique + erase 这个组合,就能高效实现 STL 容器的去重。










