C++ STL中forward_list::unique()函数

C++ STL中forward_list::unique()函数

介绍

C++ STL中,forward_list是单向链表,每个节点仅指向下一个节点。其中的unique()函数用于删除链表中重复的元素。当链表中有多项重复元素时,只保留第一项,并将其他项删除。

函数原型

unique()函数的原型如下:

void unique();

函数将当前链表中相邻的元素进行比较,找出重复的项并删除。注意,函数仅能删除相邻的重复项,如果链表中有跨节点的重复项,则不能被删除。

使用示例

考虑以下代码:

#include <iostream>
#include <forward_list>

int main() {
  std::forward_list<int> f_list = {1, 2, 2, 3, 3, 3, 4, 5, 5};
  std::cout << "Before unique: ";
  for(int i: f_list) {
    std::cout << i << " ";
  }
  std::cout << std::endl;

  f_list.unique();

  std::cout << "After unique: ";
  for(int i: f_list) {
    std::cout << i << " ";
  }
  std::cout << std::endl;

  return 0;
}

代码中创建了一个forward_list并初始化了一些元素。在调用unique()函数后,会删除其中重复的项。控制台输出如下所示:

Before unique: 1 2 2 3 3 3 4 5 5 
After unique: 1 2 3 4 5 

可以看到,重复的元素被删除了,只保留了第一次出现的元素。

自定义比较器

可以使用unique()函数默认的比较方式来查找重复项,也可以自定义比较器来实现一些特殊的需求。比如,如果需要将两个元素的差的绝对值小于某个值的视为相等,可以这样定义一个比较器:

bool is_close(int a, int b) {
  return std::abs(a - b) < 3;
}

int main() {
  std::forward_list<int> f_list = {1, 2, 4, 5, 8, 9, 11, 13};
  std::cout << "Before unique: ";
  for(int i: f_list) {
    std::cout << i << " ";
  }
  std::cout << std::endl;

  f_list.unique(is_close);

  std::cout << "After unique: ";
  for(int i: f_list) {
    std::cout << i << " ";
  }
  std::cout << std::endl;

  return 0;
}

输出结果为:

Before unique: 1 2 4 5 8 9 11 13 
After unique: 1 4 8 11 13 

可以看到,函数使用了自定义的比较器,将差的绝对值小于3的数字视为相等,删除了剩余的元素。

结论

forward_list中的unique()函数可以帮助我们删除链表中的重复项,它默认比较相邻元素,仅删除相邻的重复项。也可以通过自定义比较器来实现特殊的需求。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程