21xrx.com
2024-12-23 00:32:24 Monday
登录
文章检索 我的文章 写文章
C++实现数组去重
2023-07-07 09:28:19 深夜i     --     --
C++ 数组 去重

C++是一种非常流行的编程语言,被广泛应用于各种领域,从游戏和图形处理到企业软件和机器学习。在C++编程中,数组是一种常见的数据类型,它可以用来存储一系列的数据项。然而,在实际开发中,我们通常需要对数组进行去重操作,以去除其中的重复元素。下面是一种C++实现数组去重的方法。

1. 使用STL库

STL(Standard Template Library)是C++提供的一组标准库,其中包含了许多常用的数据结构和算法。在STL库中,有一个名为“unique”的函数,可以用来对数组进行去重操作。该函数的基本用法如下:


int* unique(int* first, int* last);

其中,参数“first”和“last”分别表示数组的起始位置和结束位置,函数返回去重后数组的新结束位置。值得注意的是,该函数并不实际删除数组中的任何元素,只是将重复元素移动到数组的末尾,并返回去重后的新长度。因此,如果需要实际删除数组中的重复元素,我们还需要调用另外一个名为“erase”的函数。该函数的基本用法如下:


int* erase(int* first, int* last, int val);

其中,参数“val”表示待删除的值,函数返回删除后数组的新结束位置。我们可以将“unique”函数和“erase”函数结合使用,来实现对数组的完全去重操作。具体代码如下:


#include <algorithm>

#include <vector>

using namespace std;

int main() {

  int arr[] = 4;

  int* end = unique(arr, arr + 10);

  vector<int> vec(arr, end);

  vec.erase(remove(vec.begin(), vec.end(), 0), vec.end());

  

  for (int i = 0; i < vec.size(); i++) {

    cout << vec[i] << " ";

  }

  return 0;

}

在上述代码中,我们首先定义了一个包含重复元素的数组“arr”。然后,我们使用“unique”函数对数组进行去重操作,得到去重后的新结束位置“end”。接着,我们将数组和“end”作为参数,定义了一个名为“vec”的向量,并调用“erase”函数来删除数组中的重复元素。最后,我们遍历了“vec”向量,并输出了其中的元素。

2. 使用自定义函数

除了STL库,我们还可以使用自定义函数来实现数组去重操作。该方法的基本思路是遍历数组中的所有元素,将重复的元素删除掉。具体代码如下:


#include <iostream>

using namespace std;

void sort(int arr[], int n) {

  int i, j, k;

  for (i = 0; i < n; i++) {

    for (j = i + 1; j < n; j++) {

      if (arr[i] == arr[j]) {

        for (k = j; k < n - 1; k++) {

          arr[k] = arr[k + 1];

        }

        n--;

        j--;

      }

    }

  }

}

int main() {

  int arr[] = 4;

  int n = sizeof(arr) / sizeof(arr[0]);

  sort(arr, n);

  for (int i = 0; i < n; i++) {

    cout << arr[i] << " ";

  }

  return 0;

}

在上述代码中,我们首先定义了一个包含重复元素的数组“arr”和它的大小“n”。然后,我们调用一个名为“sort”的自定义函数,来实现数组的去重操作。该函数的基本思路是用两个嵌套的循环来遍历数组中的所有元素,如果发现有重复的元素,就将其删除掉。最后,我们在主函数中遍历了去重后的数组,并输出了其中的元素。

总之,在C++编程中,数组去重是一项非常常见的任务。我们可以使用STL库提供的“unique”函数和“erase”函数来轻松实现,也可以自定义函数来完成。无论采用哪种方式,我们都应该注意到一点:数组去重的实现需要耗费较多的计算资源,因此应当谨慎使用,以避免影响程序的性能。

  
  

评论区

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