c++ 递归去除vector 中重复元素
时间: 2024-11-11 11:15:02 浏览: 36
在 C++ 中,我们可以使用递归来去除向量(vector)中的重复元素。递归是一种函数或过程调用自己的技术,这里可以定义一个辅助函数,用于比较当前元素是否已存在于结果集合中,如果没有则添加,有则跳过。以下是一个简单的示例:
```cpp
#include <iostream>
#include <vector>
#include <unordered_set>
// 辅助函数,使用引用避免复制
void removeDuplicates(std::vector<int>& nums, std::unordered_set<int>& seen) {
if (!nums.empty()) { // 递归出口条件:当向量为空时停止递归
if (seen.find(nums.back()) == seen.end()) {
seen.insert(nums.back()); // 将最后一个未见的元素加入集合
std::cout << nums.back() << " ";
// 递归处理剩余元素
removeDuplicates(nums.begin(), seen);
}
else {
nums.pop_back(); // 如果是重复元素,则从向量中移除
}
}
}
int main() {
std::vector<int> vec = {1, 2, 2, 3, 4, 4, 5};
std::unordered_set<int> seen;
removeDuplicates(vec, seen); // 开始递归
return 0;
}
```
在这个例子中,`removeDuplicates` 函数通过不断检查 vector 的最后元素,并将其添加到 `seen` 集合中,直到 vector 空了。如果遇到重复元素,它会被从 vector 中移除。`seen` 集合的作用类似于一个临时容器,记录已经见过的元素。
阅读全文