21xrx.com
2024-12-22 22:43:14 Sunday
登录
文章检索 我的文章 写文章
C++如何去除数组中的重复元素?
2023-06-27 18:12:05 深夜i     --     --
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++去除数组中重复元素的方法,大家可以根据具体情况选择使用。同时,需要注意的是,第三种方法的效率相对较低,当数组中的元素较多时,可能会出现执行时间过长的问题。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复