std::unique_copy
From Cppreference
|  Defined in header  <algorithm> | ||
| template< class ForwardIterator, class OutputIterator > ForwardIterator unique_copy( ForwardIterator first, ForwardIterator last, | (1) | |
| template< class ForwardIterator, class OutputIterator, class BinaryPredicate > ForwardIterator unique_copy( ForwardIterator first, ForwardIterator last, | (2) | |
Copies the elements from the range [first, last), to another range beginning at d_first in such a way, that there are no consecutive equal elements. Only the first element of each group of equal elements is copied. The first version uses operator== to compare the elements, the second version uses the given binary predicate p.
| Contents | 
Parameters
| first, last | - | the range of elements to process | |||||||||
| d_first | - | the beginning of the destination range | |||||||||
| 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: 
 The signature does not need to have const &, but the function must not modify the objects passed to it.  | |||||||||
Return value
output iterator to the element past the last written element
Equivalent function
| First version: | 
|---|
| template<class ForwardIterator, class OutputIterator> ForwardIterator unique_copy(ForwardIterator first, ForwardIterator last, OutputIterator d_first) { *d_first=*first; while (++first != last) { if (!(*d_first == *first)) { *(++d_first) = *first; } } return ++d_first; } | 
| Second version: | 
| template<class ForwardIterator, class OutputIterator, class BinaryPredicate> ForwardIterator unique_copy(ForwardIterator first, ForwardIterator last, OutputIterator d_first, BinaryPredicate p) { *d_first=*first; while (++first != last) { if (!p(*result, *first)) { *(++d_first) = *first; } } return ++d_first; } | 
Example
| This section is incomplete | 
Complexity
linear in the distance between first and last
See also
| 
 | finds two identical (or some other relationship) items adjacent to each other (function template) | |
| 
 | removes consecutive duplicate elements in a range (function template) | |
