Thrust

## ◆ unique_copy() [4/4]

template<typename InputIterator , typename OutputIterator , typename BinaryPredicate >
 OutputIterator thrust::unique_copy ( InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate binary_pred )

`unique_copy` copies elements from the range `[first, last)` to a range beginning with `result`, except that in a consecutive group of duplicate elements only the first one is copied. The return value is the end of the range to which the elements are copied.

This version of `unique_copy` uses the function object `binary_pred` to test for equality.

Parameters
 first The beginning of the input range. last The end of the input range. result The beginning of the output range. binary_pred The binary predicate used to determine equality.
Returns
The end of the unique range `[result, result_end)`.
Template Parameters
 InputIterator is a model of Input Iterator, and `InputIterator's` `value_type` is a model of Equality Comparable. OutputIterator is a model of Output Iterator and and `InputIterator's` `value_type` is convertible to `OutputIterator's` `value_type`. BinaryPredicate is a model of Binary Predicate.
Precondition
The range `[first,last)` and the range `[result, result + (last - first))` shall not overlap.

The following code snippet demonstrates how to use `unique_copy` to compact a sequence of numbers to remove consecutive duplicates.

#include <thrust/unique.h>
...
const int N = 7;
int A[N] = {1, 3, 3, 3, 2, 2, 1};
int B[N];
int *result_end = thrust::unique_copy(A, A + N, B, thrust::equal_to<int>());
// The first four values of B are now {1, 3, 2, 1} and (result_end - B) is 4
// Values beyond result_end are unspecified.