Question

Je tente actuellement d'utiliser la bibliothèque Thrust et je vais avoir des problèmes avec les types de retour.

  device_vector<int> input(5);

  input[0] = 0;
  input[1] = 2;
  input[2] = 5;
  input[3] = 7;
  input[4] = 8;

  pair<int*, int*> result= minmax_element(input.begin(), input.end());

donne l'erreur:

 error : no suitable conversion function from "const thrust::detail::normal_iterator<thrust::device_ptr<int>>" to "int *" exists

Quelqu'un pourrait-il me expliquer s'il vous plaît comment le travail ce que le type de retour doit être?

selon la documentation rel="nofollow"> le retour type est

thrust::pair<ForwardIterator,ForwardIterator>

Cependant, cela ne ne fonctionne pas pour moi, quelqu'un pourrait-il expliquer s'il vous plaît!

Merci!

Était-ce utile?

La solution

Lorsque vous nommez un paramètre de modèle, ForwardIterator ne nomme pas un type particulier. Pour nos besoins, nous pouvons considérer comme un espace réservé pour le type de iterator donné à thrust::minmax_element:

template<typename ForwardIterator>
  thrust::pair<ForwardIterator,ForwardIterator> minmax_element(ForwardIterator first, ForwardIterator last);

retourne un minmax_element de pair de tout type de iterator est donné comme arguments.

Dans votre cas, minmax_element retourne un pair de device_vector<int>::iterators. Vous pouvez faire votre compilation de code en faisant result le pair approprié:

device_vector<int> input(5);

input[0] = 0;
input[1] = 2;
input[2] = 5;
input[3] = 7;
input[4] = 8;

// we can use a typedef for brevity
typedef pair<device_vector<int>::iterator, device_vector<int>::iterator> result_type;

result_type result = minmax_element(input.begin(), input.end());

// check the results
assert(0 == *result.first);
assert(8 == *result.second);
scroll top