thrust::zip_iterator
Defined in thrust/iterator/zip_iterator.h
- 
template<typename IteratorTuple>
 class zip_iterator
- zip_iteratoris an iterator which represents a pointer into a range of- tupleswhose elements are themselves taken from a- tupleof input iterators. This iterator is useful for creating a virtual array of structures while achieving the same performance and bandwidth as the structure of arrays idiom.- zip_iteratoralso facilitates kernel fusion by providing a convenient means of amortizing the execution of the same operation over multiple ranges.- The following code snippet demonstrates how to create a - zip_iteratorwhich represents the result of “zipping” multiple ranges together.- #include <thrust/iterator/zip_iterator.h> #include <thrust/tuple.h> #include <thrust/device_vector.h> ... thrust::device_vector<int> int_v{0, 1, 2}; thrust::device_vector<float> float_v{0.0f, 1.0f, 2.0f}; thrust::device_vector<char> char_v{'a', 'b', 'c'}; // aliases for iterators using IntIterator = thrust::device_vector<int>::iterator; using FloatIterator = thrust::device_vector<float>::iterator; using CharIterator = thrust::device_vector<char>::iterator; // alias for a tuple of these iterators using IteratorTuple = thrust::tuple<IntIterator, FloatIterator, CharIterator>; // alias the zip_iterator of this tuple using ZipIterator = thrust::zip_iterator<IteratorTuple>; // finally, create the zip_iterator ZipIterator iter(thrust::make_tuple(int_v.begin(), float_v.begin(), char_v.begin())); *iter; // returns (0, 0.0f, 'a') iter[0]; // returns (0, 0.0f, 'a') iter[1]; // returns (1, 1.0f, 'b') iter[2]; // returns (2, 2.0f, 'c') thrust::get<0>(iter[2]); // returns 2 thrust::get<1>(iter[0]); // returns 0.0f thrust::get<2>(iter[1]); // returns 'b' // iter[3] is an out-of-bounds error - Defining the type of a - zip_iteratorcan be complex. The next code example demonstrates how to use the- make_zip_iteratorfunction with the- make_tuplefunction to avoid explicitly specifying the type of the- zip_iterator. This example shows how to use- zip_iteratorto copy multiple ranges with a single call to- thrust::copy.- #include <thrust/zip_iterator.h> #include <thrust/tuple.h> #include <thrust/device_vector.h> int main() { thrust::device_vector<int> int_in{0, 1, 2}, int_out(3); thrust::device_vector<float> float_in{0.0f, 10.0f, 20.0f}, float_out(3); thrust::copy(thrust::make_zip_iterator(thrust::make_tuple(int_in.begin(), float_in.begin())), thrust::make_zip_iterator(thrust::make_tuple(int_in.end(), float_in.end())), thrust::make_zip_iterator(thrust::make_tuple(int_out.begin(),float_out.begin()))); // int_out is now [0, 1, 2] // float_out is now [0.0f, 10.0f, 20.0f] return 0; } - See also - make_zip_iterator - See also - make_tuple - See also - Tuple - See also - get - Public Types - 
using iterator_tuple = IteratorTuple
- The underlying iterator tuple type. Alias to zip_iterator’s first template argument. 
 - Public Functions - 
zip_iterator() = default
 - 
inline zip_iterator(IteratorTuple iterator_tuple)
- This constructor creates a new - zip_iteratorfrom a- tupleof iterators.- Parameters
- iterator_tuple – The - tupleof iterators to copy from.
 
 - 
template<typename OtherIteratorTuple, detail::enable_if_convertible_t<OtherIteratorTuple, IteratorTuple, int> = 0>
 inline zip_iterator(const zip_iterator<OtherIteratorTuple> &other)
- This copy constructor creates a new - zip_iteratorfrom another- zip_iterator.- Parameters
- other – The - zip_iteratorto copy.
 
 - 
inline const IteratorTuple &get_iterator_tuple() const
- This method returns a - constreference to this- zip_iterator's- tupleof iterators.- Returns
- A - constreference to this- zip_iterator's- tupleof iterators.
 
 
- 
using iterator_tuple = IteratorTuple