📜  c++ std::unique (1)

📅  最后修改于: 2023-12-03 14:39:50.408000             🧑  作者: Mango

C++标准库介绍:std::unique

std::unique是C++标准库中的一个函数,用于移除容器中相邻的重复元素并返回尾部迭代器,从而在其中生成一个新的子序列。该函数只针对已排序的容器,并可以接受操作符或函数作为参数来决定元素是否相等。

函数签名
template< class ForwardIt >
ForwardIt unique( ForwardIt first, ForwardIt last );
参数
  1. first: 容器的迭代器,表示要处理的第一个元素。
  2. last: 容器的迭代器,表示要处理的最后一个元素的下一位置。
返回值

函数将返回一个迭代器,指向容器中新生成子序列的尾部的下一位置。

使用示例
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
  std::vector<int> vec1 {1, 1, 2, 2, 3, 4, 5, 5};
  
  // 使用std::unique移除相邻的重复元素
  auto end = std::unique(vec1.begin(), vec1.end());
  
  // 输出新的子序列
  std::cout << "New sequence: ";
  for (auto it = vec1.begin(); it != end; ++it) {
    std::cout << *it << " ";
  }
  std::cout << std::endl;

  return 0;
}

该程序使用std::unique函数在给定的vector中移除相邻的重复元素,并输出了新的子序列:1 2 3 4 5

注意事项
  1. std::unique函数只能用于已排序的容器。如果想要移除未排序的容器中的重复元素,可以使用std::unique_copy函数。
  2. std::unique函数仅移除相邻的重复元素,如果容器中存在不相邻的重复元素,则需要先将容器排序处理后才能保证函数有效。
  3. 如果需要指定元素相等的条件,可以传入操作符或函数来实现。例如,可以使用std::unique(vec1.begin(), vec1.end(), [](int x, int y){ return x == y; })来移除相等的元素。