# std::list<T,Allocator>::unique

From cppreference.com
< cpp‎ | container‎ | list

| (1) |
void unique(); |  | (until C++20)
size_type unique(); |  | (since C++20)
| (2) |
template< class BinaryPredicate > void unique( BinaryPredicate p ); |  | (until C++20)
template< class BinaryPredicate > size_type unique( BinaryPredicate p ); |  | (since C++20)

Removes all consecutive duplicate elements from the container. Only the first element in each group of equal elements is left. The first version uses `operator==` to compare the elements, the second version uses the given binary predicate `p`.

### Parameters

p

-

binary predicate which returns ​true if the elements should be treated as equal.

The signature of the predicate function should be equivalent to the following:

bool pred(const Type1 &a, const Type2 &b);

While the signature does not need to have const &, the function must not modify the objects passed to it and must be able to accept all values of type (possibly const) `Type1` and `Type2` regardless of value category (thus, Type1 & is not allowed, nor is Type1 unless for `Type1` a move is equivalent to a copy (since C++11)).
The types Type1 and Type2 must be such that an object of type list<T,Allocator>::const_iterator can be dereferenced and then implicitly converted to both of them. ​

### Return value

(none) | (until C++20)
The number of elements removed. | (since C++20)

### Complexity

Linear in the size of the container

### Example

Run this code

    #include <iostream>
    #include <list>

    int main()
    {
      std::list<int> x = {1, 2, 2, 3, 3, 2, 1, 1, 2};

      std::cout << "contents before:";
      for (auto val : x)
        std::cout << ' ' << val;
      std::cout << '\n';

      x.unique();
      std::cout << "contents after unique():";
      for (auto val : x)
        std::cout << ' ' << val;
      std::cout << '\n';

      return 0;
    }

Output:

    contents before: 1 2 2 3 3 2 1 1 2
    contents after unique(): 1 2 3 2 1 2

### See also

unique | removes consecutive duplicate elements in a range (function template)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/list/unique&oldid=50547"