holyya.com
2025-09-04 17:01:05 Thursday
登录
文章检索 我的文章 写文章
C++向量去重:如何删除重复元素
2023-07-02 21:36:18 深夜i     --     --
C++ 向量 去重 删除 重复元素

在使用C++中的向量进行数据处理时,往往会遇到需要删除其中的重复元素的情况。在这种情况下,我们可以借助STL算法库中的unique()函数来实现去重。

unique()函数的使用方法非常简单,只需将需要操作的vector容器作为该函数的参数即可。在执行完该函数之后,vector容器中的重复元素会被移动到容器末尾,并且被unique()函数返回值指向的元素位置开始的所有元素均为无重复元素。最后剩余的元素数量可以通过vector容器的erase()函数来进行删除。

下面是一个简单的示例,演示如何利用unique()函数去除一个整型向量中的重复元素。请注意,vector 容器和 unique() 函数都位于C++自带的std命名空间中。


#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

int main()

{

  vector<int> nums = 2;

  

  vector<int>::iterator iter = unique(nums.begin(), nums.end());

  nums.erase(iter, nums.end());

  

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

  {

    cout << nums[i] << " ";

  }

  cout << endl;

  return 0;

}

在上面的代码中,我们首先定义了一个名为nums的整型向量,并向其中添加了几个数值。接下来,我们直接调用了unique()函数,并将vector容器传递给它作为参数。由于unique()返回的是一个迭代器,该迭代器指向的元素位置以后的值就是去重之后的元素。我们将这部分元素使用vector 容器的erase()函数删除掉,最后再遍历vector容器中的所有元素,输出结果。

通过运行上面的程序,我们可以得到以下输出结果:


1 2 3 4 5 6

可以看出,我们成功去除了原先vector容器中的重复元素,并且保留了容器中的原有元素顺序。

在实际编程中,有时候我们可能需要对自定义类型的vector容器进行去重操作。例如,我们可能需要定义一个名为Student的结构体,其中包含了学生的姓名和年龄信息。下面是一个简单的示例,演示如何利用unique()函数去除一个包含Student类型元素的vector容器中的重复元素:


#include <iostream>

#include <vector>

#include <string>

#include <algorithm>

using namespace std;

struct Student

{

  string name;

  int age;

  bool operator == (const Student &stu)

  

    return name == stu.name && age == stu.age;

  

};

int main()

{

  vector<Student> students = { 18, 20, "Bob", "Tom", "Cat"};

  

  vector<Student>::iterator iter = unique(students.begin(), students.end());

  students.erase(iter, students.end());

  

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

  {

    cout << students[i].name << " " << students[i].age << endl;

  }

  return 0;

}

在上面的代码中,我们首先定义了一个名为Student的结构体,其中包含了学生的姓名和年龄信息。接下来,我们向一个名为students的整型向量中添加了若干Student类型的元素。由于我们使用了自定义的Student类型,因此在unique()函数内部需要自己写一个相应的比较函数,判断元素是否重复。最后,我们同样使用erase()函数删除了重复元素,并输出了去重之后的vector容器中的所有元素。

通过运行上面的代码,我们可以得到以下输出结果:


Tom 18

Alice 20

Bob 18

Cat 22

可以看到,我们同样成功去除了原先vector容器中的重复元素,并且保留了容器中的原有元素顺序。

  
  

评论区

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