21xrx.com
2025-03-27 22:39:46 Thursday
文章检索 我的文章 写文章
如何在C++中删除数组中重复的元素
2023-07-05 06:17:12 深夜i     71     0
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()函数,使用哈希表,以及双指针法。读者可以根据自己的需求和优势选择其中适合的方法。

  
  

评论区