c++中如何数组去重
时间: 2024-10-14 19:11:42 浏览: 50
在C++中,数组去重可以通过多种方法实现。以下是几种常见的方法:
1. **使用标准模板库(STL)中的 `std::unique` 和 `std::sort` 函数**:
- **步骤**:
1. 先对数组进行排序,可以使用 `std::sort`。
2. 然后使用 `std::unique` 去除相邻的重复元素。
3. 最后使用 `std::distance` 计算新数组的大小。
- **示例代码**:
```cpp
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> arr = {1, 2, 2, 3, 4, 4, 5};
std::sort(arr.begin(), arr.end());
auto last = std::unique(arr.begin(), arr.end());
arr.erase(last, arr.end());
for (int n : arr) {
std::cout << n << ' ';
}
return 0;
}
```
2. **使用哈希表(例如 `std::unordered_set`)**:
- **步骤**:
1. 将数组元素插入到 `std::unordered_set` 中,这会自动去重。
2. 再将 `std::unordered_set` 中的元素转存回 `std::vector` 中。
- **示例代码**:
```cpp
#include <iostream>
#include <unordered_set>
#include <vector>
int main() {
std::vector<int> arr = {1, 2, 2, 3, 4, 4, 5};
std::unordered_set<int> set(arr.begin(), arr.end());
arr.assign(set.begin(), set.end());
for (int n : arr) {
std::cout << n << ' ';
}
return 0;
}
```
3. **使用双指针法**:
- **步骤**:
1. 使用两个指针,一个用于遍历原数组,另一个用于记录不重复元素的位置。
2. 遍历时只将不重复的元素复制到前面的位置。
- **示例代码**:
```cpp
#include <iostream>
#include <vector>
void removeDuplicates(std::vector<int>& arr) {
if (arr.empty()) return;
int j = 0;
for (int i = 1; i < arr.size(); i++) {
if (arr[i] != arr[j]) {
j++;
arr[j] = arr[i];
}
}
arr.resize(j + 1);
}
int main() {
std::vector<int> arr = {1, 2, 2, 3, 4, 4, 5};
removeDuplicates(arr);
for (int n : arr) {
std::cout << n << ' ';
}
return 0;
}
```
阅读全文