c++STL的algorithm中unique函数去重数组
作者:野牛程序员:2024-06-17 11:17:25 C++阅读 2755
c++STL的algorithm中unique函数去重数组
在C++ STL的algorithm
库中,unique
函数可以用于去除数组中的重复元素。unique
函数不会改变数组的大小,而是将重复的元素移到数组的后面,并返回一个新的结束迭代器,表示不重复元素的范围。
下面是使用unique
函数去重数组的示例:
#include <iostream> #include <algorithm> #include <vector> int main() { std::vector<int> vec = {1, 2, 2, 3, 4, 4, 4, 5}; // 先排序,以便 unique 可以正确地处理重复元素 std::sort(vec.begin(), vec.end()); // 使用 unique 去除重复元素 auto it = std::unique(vec.begin(), vec.end()); // 使用 erase 去除多余的元素 vec.erase(it, vec.end()); // 输出去重后的数组 for (const auto& elem : vec) { std::cout << elem << " "; } return 0; }
运行上述代码,将会得到以下输出:
1 2 3 4 5
解释
排序:
std::sort(vec.begin(), vec.end());
先对数组进行排序。unique
函数只能移除连续的重复元素,因此在使用unique
函数之前需要先对数组进行排序。去重:
auto it = std::unique(vec.begin(), vec.end());
unique
函数将相邻的重复元素移到数组的末尾,并返回一个指向新末尾的迭代器。删除多余元素:
vec.erase(it, vec.end());
使用erase
函数删除unique
函数移动到末尾的多余元素,以调整数组的大小。
这种方法的时间复杂度为O(N log N),其中N是数组的大小。主要的时间花费在排序上,而unique
和erase
的时间复杂度都是线性的,即O(N)。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892