如何删除数组中的重复C++
时间: 2024-12-20 15:24:17 浏览: 11
在C++中,可以使用多种方法来删除数组中的重复元素,这里提供两种常见的方法:
1. **标准库算法** - 使用`std::unique`和`std::remove_copy_if`:
```cpp
#include <algorithm>
#include <iterator>
void removeDuplicates(int arr[], int n) {
if (n == 0 || n == 1) return; // 如果数组只有一个元素或为空,直接返回
std::sort(arr, arr + n); // 先对数组排序
n = std::unique(arr, arr + n) - arr; // 使用unique删除重复并更新有效长度
// 注意:此时arr[n]已经是最后一个不同的元素,如果你想保留原始顺序,可以再复制到新数组
// 或者直接将多余的元素设置为某个特定值,如0
}
// 示例
int main() {
int arr[] = {1, 2, 2, 3, 4, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
removeDuplicates(arr, n);
for (int i : arr) {
std::cout << i << " ";
}
return 0;
}
```
2. **自定义函数** - 使用两个指针法:
```cpp
void removeDuplicates(int arr[], int &n) {
if (n <= 1) return;
int j = 0; // 新的无重复元素的下标
for (int i = 1; i < n; ++i) {
if (arr[i] != arr[j]) {
arr[++j] = arr[i]; // 当前元素不重复,移动到新位置
}
}
n = j + 1; // 更新有效长度
}
int main() {
int arr[] = {1, 2, 2, 3, 4, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
removeDuplicates(arr, n);
for (int i = 0; i < n; ++i) {
std::cout << arr[i] << " ";
}
return 0;
}
```
阅读全文