thrust

◆ copy_n() [1/2]

template<typename DerivedPolicy , typename InputIterator , typename Size , typename OutputIterator >
__host__ __device__ OutputIterator thrust::copy_n ( const thrust::detail::execution_policy_base< DerivedPolicy > &  exec,
InputIterator  first,
Size  n,
OutputIterator  result 
)

copy_n copies elements from the range [first, first + n) to the range [result, result + n). That is, it performs the assignments *result = *first, *(result + 1) = *(first + 1), and so on. Generally, for every integer i from 0 to n, copy performs the assignment *(result + i) = *(first + i). Unlike std::copy_n, copy_n offers no guarantee on order of operation. As a result, calling copy_n with overlapping source and destination ranges has undefined behavior.

The return value is result + n.

The algorithm's execution is parallelized as determined by exec.

Parameters
execThe execution policy to use for parallelization.
firstThe beginning of the range to copy.
nThe number of elements to copy.
resultThe beginning destination range.
Returns
The end of the destination range.
Template Parameters
DerivedPolicyThe name of the derived execution policy.
InputIteratormust be a model of Input Iterator and InputIterator's value_type must be convertible to OutputIterator's value_type.
Sizeis an integral type.
OutputIteratormust be a model of Output Iterator.
Precondition
result may be equal to first, but result shall not be in the range [first, first + n) otherwise.

The following code snippet demonstrates how to use copy to copy from one range to another using the thrust::device parallelization policy:

#include <thrust/copy.h>
...
size_t n = 100;
...
thrust::copy_n(thrust::device, vec0.begin(), n, vec1.begin());
// vec1 is now a copy of vec0
See also
http://www.sgi.com/tech/stl/copy_n.html
thrust::copy