c++函数去重(不打乱数组本身的顺序)
时间: 2024-10-24 19:14:40 浏览: 36
在C++中,若想在一个数组中去除重复元素而不改变其原有的顺序,可以使用`std::map`或`std::vector<bool>`配合迭代器来进行操作,因为`map`或`vector<bool>`会自动排序,而我们仅关注去重,所以可以利用这个特性。这里有一个基本的示例:
```cpp
#include <iostream>
#include <vector>
// 去除重复元素并保留原顺序的函数
template<typename T>
void removeDuplicatesAndKeepOrder(T arr[], int n, std::vector<bool>& used) {
for (int i = 0; i < n; ++i) {
used[i] = false;
}
for (int i = 0; i < n; ++i) {
if (!used[i]) {
// 找到第一个未使用的元素并标记为已使用
used[i] = true;
std::cout << arr[i] << " ";
} else if (!used[arr[i]]) {
// 如果后续找到相同的值,跳过
continue;
}
}
}
int main() {
int arr[] = {1, 3, 2, 1, 5, 6, 4, 2};
int size = sizeof(arr) / sizeof(arr[0]);
std::vector<bool> used(size, false);
removeDuplicatesAndKeepOrder(arr, size, used);
return 0;
}
```
在这个例子中,`used`向量用于追踪每个元素是否已经被处理过了。第一次遇到的元素会被设置为`true`,之后再遇到相同的元素,由于`used[arr[i]]`为`true`,则会跳过。
阅读全文