std::forward_list<T,Allocator>::unique (3) - Linux Manuals

std::forward_list<T,Allocator>::unique: std::forward_list<T,Allocator>::unique

NAME

std::forward_list<T,Allocator>::unique - std::forward_list<T,Allocator>::unique

Synopsis


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


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


    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);
p - 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 forward_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 <forward_list>


  int main()
  {
    std::forward_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


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