template<class ForwardIterator>
ForwardIterator unique(ForwardIterator first, ForwardIterator last);
template<class ExecutionPolicy, class ForwardIterator>
ForwardIterator unique(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last);
template<class ForwardIterator, class BinaryPredicate>
ForwardIterator unique(ForwardIterator first, ForwardIterator last,
BinaryPredicate pred);
template<class ExecutionPolicy, class ForwardIterator, class BinaryPredicate>
ForwardIterator unique(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
BinaryPredicate pred);
Requires:
The comparison function shall be an equivalence relation
. The type of
*first shall satisfy the
MoveAssignable requirements (Table
25)
.Effects:
For a nonempty range, eliminates all but the first element from every
consecutive group of equivalent elements referred to by the iterator
i
in the range
[first + 1, last)
for which the following conditions hold:
*(i - 1) == *i
or
pred(*(i - 1), *i) != false. Returns:
The end of the resulting range
. Complexity:
For nonempty ranges, exactly
(last - first) - 1
applications of the corresponding predicate
. template<class InputIterator, class OutputIterator>
OutputIterator
unique_copy(InputIterator first, InputIterator last,
OutputIterator result);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
ForwardIterator2
unique_copy(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result);
template<class InputIterator, class OutputIterator,
class BinaryPredicate>
OutputIterator
unique_copy(InputIterator first, InputIterator last,
OutputIterator result, BinaryPredicate pred);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class BinaryPredicate>
ForwardIterator2
unique_copy(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result, BinaryPredicate pred);
Requires:
The comparison function shall be an equivalence relation
.The ranges
[first, last)
and
[result, result+(last-first))
shall not overlap
.The expression
*result = *first
shall be valid
.For the overloads with no
ExecutionPolicy,
let
T be the value type of
InputIterator. If
InputIterator meets the forward iterator requirements,
then there are no additional requirements for
T. Otherwise, if
OutputIterator meets the forward iterator
requirements and its value type is the same as
T,
then
T shall be
CopyAssignable (Table
26)
. Otherwise,
T shall be both
CopyConstructible (Table
24) and
CopyAssignable. [
Note: For the overloads with an
ExecutionPolicy, there may be a performance
cost if the value type of
ForwardIterator1 is not both
CopyConstructible and
CopyAssignable. —
end note ]
Effects:
Copies only the first element from every consecutive group of equal elements referred to by
the iterator
i
in the range
[first, last)
for which the following corresponding conditions hold:
*i == *(i - 1)
or
pred(*i, *(i - 1)) != false. Returns:
The end of the resulting range
. Complexity:
For nonempty ranges, exactly
last - first - 1
applications of the corresponding predicate
.