21xrx.com
2025-07-08 09:36:16 Tuesday
登录
文章检索 我的文章 写文章
C++如何去除数组中的重复元素?
2023-06-27 18:12:05 深夜i     9     0
C++ 去除 数组 重复元素

在C++中,我们可以使用很多方法来去除数组中的重复元素。这些方法的效率和适用情况不同,我们需要根据具体情况选择合适的方法。

1. 使用set容器

set容器可以自动去除重复元素,我们可以将数组中的元素放入set中,然后将set中的元素再放回数组,这样就可以去除数组中的重复元素了。

示例代码:

#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
int main()
{
  int arr[] = 1;
  int n = sizeof(arr) / sizeof(arr[0]);
  
  set<int> s(arr, arr + n);
  n = s.size();
  
  int i = 0;
  for (int x : s)
    arr[i++] = x;
  
  for (int j = 0; j < n; j++)
    cout << arr[j] << " ";
  
  return 0;
}

输出结果为:1 2 3 4 5 6。

2. 使用sort排序+unique去重

将数组进行排序后,利用unique函数去掉相邻的重复元素,最后将剩余的元素放到数组前面。由于sort和unique均为STL库中的函数,所以使用方式也非常简单。

示例代码:

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
  int arr[] = 6;
  int n = sizeof(arr) / sizeof(arr[0]);
  sort(arr, arr + n);
  int *p = unique(arr, arr + n);
  n = p - arr;
  for (int i = 0; i < n; i++)
    cout << arr[i] << " ";
  return 0;
}

输出结果为:1 2 3 4 5 6。

3. 使用双重for循环

双重for循环的思路非常简单,即将第i个元素与第i+1到第n个元素逐一比较,如果有相同的则将后面的元素向前移动一位,并将数组长度n减1。

示例代码:

#include <iostream>
using namespace std;
int main()
{
  int arr[] = 5;
  int n = sizeof(arr) / sizeof(arr[0]);
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      if (arr[i] == arr[j]) {
        for (int k = j; k < n - 1; k++)
          arr[k] = arr[k + 1];
        n--;
        j--;
      }
    }
  }
  
  for (int i = 0; i < n; i++)
    cout << arr[i] << " ";
  return 0;
}

输出结果为:1 2 3 4 5 6。

以上就是三种常用的C++去除数组中重复元素的方法,大家可以根据具体情况选择使用。同时,需要注意的是,第三种方法的效率相对较低,当数组中的元素较多时,可能会出现执行时间过长的问题。

  
  

评论区