Domanda

Attualmente sto cercando di utilizzare la libreria di spinta e sto avendo problemi con i tipi restituiti.

  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());

dà l'errore:

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

Qualcuno potrebbe spiegare a me come lavoro fuori quello che il tipo di ritorno dovrebbe essere?

documentazione il ritorno tipo è

thrust::pair<ForwardIterator,ForwardIterator>

Tuttavia questo non non funziona per me, qualcuno potrebbe spiegare!

Grazie!

È stato utile?

Soluzione

Quando si nomina un parametro di template, ForwardIterator non nomina alcun tipo. Per i nostri scopi, possiamo pensare ad esso come un segnaposto per il tipo di iteratore dato a thrust::minmax_element:

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

Quindi minmax_element restituisce un pair di qualsiasi tipo di iteratore è dato ad essa come argomenti.

Nel tuo caso, minmax_element restituisce un pair di device_vector<int>::iterators. È possibile rendere il codice di compilazione facendo result il pair appropriata:

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top