#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> a = {4, 2, 2, 8, 5, 5, 7};
// 先对容器进行排序
std::sort(a.begin(), a.end());
// 使用 std::unique 移除连续重复的元素
a.erase(std::unique(a.begin(), a.end()), a.end());
// 现在 a只包含不重复的元素,并且已经排序
for (int x : a) {
std::cout << x << ' ';
}
return 0;
}
在C++中,当你使用std::unique
算法结合容器(如std::vector
)来删除重复元素时,实际上并没有直接得到一个表示删除了多少个重复元素的整数值。但是,你可以通过比较std::unique
返回的迭代器与容器末尾的迭代器来计算出被“逻辑上删除”(即移动到容器末尾并准备被erase
)的元素个数。
这里是一个示例,展示了如何计算并输出通过std::unique
和erase
删除的重复元素个数:
#include <iostream>
#include <vector>
#include <algorithm> // 包含 std::unique 和 std::sort
int main() {
std::vector<int> vec = {1, 2, 2, 3, 4, 4, 4, 5};
// 排序是必需的,因为std::unique只能移除连续的重复元素
std::sort(vec.begin(), vec.end());
// 使用std::unique
auto last = std::unique(vec.begin(), vec.end());
// 计算并输出删除的重复元素个数
size_t removed_count = vec.end() - last; // 容器末尾到last的距离
std::cout << "Removed " << removed_count << " duplicate elements." << std::endl;
// 真正地从容器中删除这些元素
vec.erase(last, vec.end());
// 输出处理后的容器
std::cout << "After removing duplicates: ";
for (int num : vec) {
std::cout << num << ' ';
}
std::cout << std::endl;
return 0;
}