公共成员函数
<list>

std::list::unique

(1)
void unique();
(2)
template <class BinaryPredicate>  void unique (BinaryPredicate binary_pred);
移除重复值
无参数版本 (1),从容器中每组连续的相同元素中移除除第一个元素外的所有元素。

请注意,只有当一个元素与它紧邻的前一个元素比较相等时,它才会被从 list 容器中移除。因此,此函数对于已排序的列表特别有用。

第二个版本 (2),接受一个特定的比较函数作为参数,该函数用于确定元素的“唯一性”。实际上,可以实现任何行为(而不仅仅是相等比较),但请注意,该函数将调用binary_pred(*i,*(i-1))对于所有元素对(其中i是元素的迭代器,从第二个开始)并将i从列表中移除,如果谓词返回true.

被移除的元素将被销毁。

参数

binary_pred
二元谓词,接受与 list 中包含的类型相同的两个值,如果需要从容器中移除第一个参数所传递的元素,则返回truetrue,否则返回 false。
这应该是一个函数指针或一个函数对象。

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// list::unique
#include <iostream>
#include <cmath>
#include <list>

// a binary predicate implemented as a function:
bool same_integral_part (double first, double second)
{ return ( int(first)==int(second) ); }

// a binary predicate implemented as a class:
struct is_near {
  bool operator() (double first, double second)
  { return (fabs(first-second)<5.0); }
};

int main ()
{
  double mydoubles[]={ 12.15,  2.72, 73.0,  12.77,  3.14,
                       12.77, 73.35, 72.25, 15.3,  72.25 };
  std::list<double> mylist (mydoubles,mydoubles+10);
  
  mylist.sort();             //  2.72,  3.14, 12.15, 12.77, 12.77,
                             // 15.3,  72.25, 72.25, 73.0,  73.35

  mylist.unique();           //  2.72,  3.14, 12.15, 12.77
                             // 15.3,  72.25, 73.0,  73.35

  mylist.unique (same_integral_part);  //  2.72,  3.14, 12.15
                                       // 15.3,  72.25, 73.0

  mylist.unique (is_near());           //  2.72, 12.15, 72.25

  std::cout << "mylist contains:";
  for (std::list<double>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

输出
mylist contains: 2.72 12.15 72.25


复杂度

时间复杂度为容器大小减一的线性时间。

迭代器有效性

引用被函数移除的元素的迭代器、指针和引用将失效。
所有其他迭代器、指针和引用保持其有效性。

数据竞争

容器被修改。
被移除的元素被修改。并发访问或修改其他元素是安全的,尽管遍历容器则不安全。

异常安全

如果 binary_pred 或元素比较保证不抛出异常,则函数绝不抛出异常(无抛出保证)。
否则,如果抛出异常,容器将处于有效状态(基本保证)。

另见