[section:unique unique]

[heading Prototype]

``
template<class ForwardRange>
typename range_return<ForwardRange, return_begin_found>::type
unique(ForwardRange& rng);

template<class ForwardRange>
typename range_return<const ForwardRange, return_begin_found>::type
unique(const ForwardRange& rng);

template<class ForwardRange, class BinaryPredicate>
typename range_return<ForwardRange, return_begin_found>::type
unique(ForwardRange& rng, BinaryPredicate pred);

template<class ForwardRange, class BinaryPredicate>
typename range_return<const ForwardRange, return_begin_found>::type
unique(const ForwardRange& rng, BinaryPredicate pred);

template<range_return_value re, class ForwardRange>
typename range_return<ForwardRange, re>::type
unique(ForwardRange& rng);

template<range_return_value re, class ForwardRange>
typename range_return<const ForwardRange, re>::type
unique(const ForwardRange& rng);

template<range_return_value re, class ForwardRange, class BinaryPredicate>
typename range_return<ForwardRange, re>::type
unique(ForwardRange& rng, BinaryPredicate pred);

template<range_return_value re, class ForwardRange, class BinaryPredicate>
typename range_return<const ForwardRange, re>::type
unique(const ForwardRange& rng, BinaryPredicate pred);
``

[heading Description]

`unique` removes all but the first element of each sequence of duplicate encountered in `rng`.

Elements in the range `[new_last, end(rng))` are dereferenceable but undefined.

Equality is determined by the predicate if one is supplied, or by `operator==()` for `ForwardRange`'s value type.

[heading Definition]

Defined in the header file `boost/range/algorithm/unique.hpp`

[heading Requirements]

[*For the non-predicate versions of unique:]

* `ForwardRange` is a model of the __forward_range__ Concept.
* `ForwardRange` is mutable.
* `ForwardRange`'s value type is a model of the `EqualityComparableConcept`.

[*For the predicate versions of unique:]

* `ForwardRange` is a model of the __forward_range__ Concept.
* `ForwardRange` is mutable.
* `BinaryPredicate` is a model of the `BinaryPredicateConcept`.
* `ForwardRange`'s value type is convertible to `BinaryPredicate`'s first argument type and to `BinaryPredicate`'s second argument type.

[heading Complexity]

Linear. `O(N)` where `N` is `distance(rng)`. Exactly `distance(rng)` comparisons are performed.

[endsect]


