thrust::unique_copy
Defined in thrust/unique.h
- 
template<typename DerivedPolicy, typename InputIterator, typename OutputIterator>
 OutputIterator thrust::unique_copy(const thrust::detail::execution_policy_base<DerivedPolicy> &exec, InputIterator first, InputIterator last, OutputIterator result)
- unique_copycopies 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.- The reason there are two different versions of unique_copy is that there are two different definitions of what it means for a consecutive group of elements to be duplicates. In the first version, the test is simple equality: the elements in a range - [f, l)are duplicates if, for every iterator- iin the range, either- i == for else- *i == *(i-1). In the second, the test is an arbitrary- BinaryPredicate- binary_pred:the elements in- [f, l)are duplicates if, for every iterator- iin the range, either- i == for else- binary_pred(*i, *(i-1))is- true.- This version of - unique_copyuses- operator==to test for equality.- The algorithm’s execution is parallelized as determined by - exec.- The following code snippet demonstrates how to use - unique_copyto compact a sequence of numbers to remove consecutive duplicates using the- thrust::hostexecution policy for parallelization:- #include <thrust/unique.h> #include <thrust/execution_policy.h> ... const int N = 7; int A[N] = {1, 3, 3, 3, 2, 2, 1}; int B[N]; int *result_end = thrust::unique_copy(thrust::host, A, A + N, B); // The first four values of B are now {1, 3, 2, 1} and (result_end - B) is 4 // Values beyond result_end are unspecified - See also - unique - Parameters
- exec – The execution policy to use for parallelization. 
- first – The beginning of the input range. 
- last – The end of the input range. 
- result – The beginning of the output range. 
 
- Template Parameters
- DerivedPolicy – The name of the derived execution policy. 
- InputIterator – is a model of Input Iterator, and - InputIterator's- value_typeis a model of Equality Comparable.
- OutputIterator – is a model of Output Iterator and and - InputIterator's- value_typeis convertible to- OutputIterator's- value_type.
 
- Returns
- The end of the unique range - [result, result_end).
- Pre
- The range - [first,last)and the range- [result, result + (last - first))shall not overlap.