Thrust

◆ shuffle_copy() [1/2]

template<typename DerivedPolicy , typename RandomIterator , typename OutputIterator , typename URBG >
__host__ __device__ void thrust::shuffle_copy ( const thrust::detail::execution_policy_base< DerivedPolicy > &  exec,
RandomIterator  first,
RandomIterator  last,
OutputIterator  result,
URBG &&  g 
)

shuffle_copy differs from shuffle only in that the reordered sequence is written to different output sequences, rather than in place. shuffle_copy reorders the elements [first, last) by a uniform pseudorandom permutation, defined by random engine g.

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

Parameters
execThe execution policy to use for parallelization.
firstThe beginning of the sequence to shuffle.
lastThe end of the sequence to shuffle.
resultDestination of shuffled sequence
gA UniformRandomBitGenerator
Template Parameters
DerivedPolicyThe name of the derived execution policy.
RandomIteratoris a random access iterator
OutputIteratoris a model of Output Iterator.
URBGis a uniform random bit generator

The following code snippet demonstrates how to use shuffle_copy to create a random permutation.

#include <thrust/shuffle.h>
#include <thrust/random.h>
int A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int result[10];
const int N = sizeof(A)/sizeof(int);
thrust::shuffle_copy(thrust::host, A, A + N, result, g);
// result is now {6, 5, 8, 7, 2, 1, 4, 3, 10, 9}
See also
shuffle