21xrx.com
2024-12-22 22:03:54 Sunday
登录
文章检索 我的文章 写文章
如何在C++中删除数组中重复的元素
2023-07-05 06:17:12 深夜i     --     --
C++ 删除 数组 重复元素

在C++中删除数组中重复的元素是一种常见的需求,本文将介绍一些方法来实现这一目标。

1. 使用STL库中的unique()函数

STL库中的unique()函数可以很方便地删除数组中相邻的重复元素。它会返回一个指针,指向去重后的区间末尾,我们可以再通过erase()函数将重复元素在原数组中删除。

示例代码:


#include <algorithm>

#include <vector>

int main()

{

  int arr[] = 5;

  int n = sizeof(arr) / sizeof(int);

  

  std::vector<int> vec(arr, arr + n);

  std::vector<int>::iterator it = std::unique(vec.begin(), vec.end()); // 去重

  vec.erase(it, vec.end()); // 删除重复元素

  

  // 输出去重后的数组元素

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

  {

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

  }

  

  return 0;

}

输出结果:1 2 3 4 5

2. 使用哈希表

哈希表是一种高效的数据结构,可以帮助我们快速判断数组中是否存在某个元素。我们可以通过遍历数组,将不重复的元素放入一个哈希表中,然后再把哈希表中的元素放回原数组中。

示例代码:


#include <unordered_set>

int main()

{

  int arr[] = 2;

  int n = sizeof(arr) / sizeof(int);

  

  std::unordered_set<int> s; // 哈希表

  int j = 0;

  

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

  {

    if (s.find(arr[i]) == s.end()) // 如果哈希表中不存在该元素

    {

      s.insert(arr[i]); // 添加到哈希表中

      arr[j++] = arr[i]; // 把元素放回原数组中

    }

  }

  

  // 输出去重后的数组元素

  for (int i = 0; i < j; i++)

  {

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

  }

  

  return 0;

}

输出结果:1 2 3 4 5

3. 使用双指针

双指针法也可以实现去重与缩短数组的目的。我们可以用一个指针指向当前已去重部分的末尾,再用另一个指针遍历整个数组,并和已去重部分末尾进行比较。如果两元素不相同,就把新元素添加到已去重部分末尾,并让已去重部分末尾指针向后移动一位。

示例代码:


int main()

{

  int arr[] = 2;

  int n = sizeof(arr) / sizeof(int);

  

  int i = 0;

  for (int j = 0; j < n; j++)

  {

    if (arr[j] != arr[i]) // 如果当前元素不等于已去重部分的末尾元素

    {

      i++; // 把新元素添加到末尾

      arr[i] = arr[j];

    }

  }

  

  // 输出去重后的数组元素

  for (int j = 0; j <= i; j++)

  {

    std::cout << arr[j] << " ";

  }

  

  return 0;

}

输出结果:1 2 3 4 5

本文介绍了三种常见的方法来在C++中删除数组中重复的元素:使用STL库中的unique()函数,使用哈希表,以及双指针法。读者可以根据自己的需求和优势选择其中适合的方法。

  
  

评论区

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