2015-03-26 2 views
1

Предположим, у меня есть массив A [0,2,4,5,6,7]Есть ли способ использовать Thrust, чтобы установить флаг на основе вектора индексов

Я хочу, чтобы преобразовать его в B:

в [1,0,1,0,1,1,1,1]

Таким образом, представляют собой индексы которых элемент B должен быть установлен в 1. А сортируется.

Максимальное количество в массиве A известно так, что размер B известен заранее.

Есть ли простой способ вызвать библиотеку Thrust для этого?

Спасибо за помощь

ответ

1

Это может быть сделано в одной строке в тяге:

#include <thrust/iterator/constant_iterator.h> 
#include <thrust/iterator/permutation_iterator.h> 
#include <thrust/copy.h> 
#include <iostream> 

int main() 
{ 

    int A[6] = {0,2,4,5,6,7}; 
    int B[7] = {0}; 

    const int count_A = 6; 

    thrust::copy(thrust::make_constant_iterator(1), thrust::make_constant_iterator(1)+count_A, thrust::make_permutation_iterator(B,A)); 

    thrust::copy(B, B+7, std::ostream_iterator<int>(std::cout, " ")); 
    return 0; 
} 

Выход:

 
1 0 1 0 1 1 1 
+0

Спасибо. Это именно то, что я хочу – yidiyidawu