Template Function thrust::reverse_copy(BidirectionalIterator, BidirectionalIterator, OutputIterator)

Function Documentation

template<typename BidirectionalIterator, typename OutputIterator>
OutputIterator thrust::reverse_copy(BidirectionalIterator first, BidirectionalIterator last, OutputIterator result)

reverse_copy differs from reverse only in that the reversed range is written to a different output range, rather than inplace.

reverse_copy copies elements from the range [first, last) to the range [result, result + (last - first)) such that the copy is a reverse of the original range. Specifically: for every i such that 0 <= i < (last - first), reverse_copy performs the assignment *(result + (last - first) - i) = *(first + i).

The return value is result + (last - first)).

The following code snippet demonstrates how to use

reverse_copy to reverse an input device_vector of integers to an output device_vector.
Pre

The range [first, last) and the range [result, result + (last - first)) shall not overlap.

Parameters
  • first: The beginning of the range to reverse.

  • last: The end of the range to reverse.

  • result: The beginning of the output range.

Template Parameters
  • BidirectionalIterator: is a model of Bidirectional Iterator, and BidirectionalIterator's value_type is convertible to OutputIterator's value_type.

  • OutputIterator: is a model of Output Iterator.

#include <thrust/reverse.h>
...
const int N = 6;
int data[N] = {0, 1, 2, 3, 4, 5};
thrust::device_vector<int> input(data, data + N);
thrust::device_vector<int> output(N);
thrust::reverse_copy(v.begin(), v.end(), output.begin());
// input is still {0, 1, 2, 3, 4, 5}
// output is now  {5, 4, 3, 2, 1, 0}

See

http://www.sgi.com/tech/stl/reverse_copy.html

See

reverse

See

reverse_iterator