Frage

Ich versuche derzeit, die Thrust Library zu verwenden, und habe Probleme mit den Rückgabetypen.

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

gibt den Fehler an:

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

Könnte mir bitte jemand erklären, wie es klappt, wie der Rückgabetyp aussehen soll?

laut dem Dokumentation Der Rückgabetyp ist

thrust::pair<ForwardIterator,ForwardIterator>

Das funktioniert jedoch nicht für mich, könnte jemand bitte erklären!

Vielen Dank!

War es hilfreich?

Lösung

Bei der Benennung eines Vorlagenparameters, ForwardIterator nennt keinen bestimmten Typ. Für unsere Zwecke können wir es als Platzhalter für die Art von Iterator betrachten thrust::minmax_element:

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

So minmax_element Gibt eine zurück pair von jeder Art von Iterator wird ihm als Argumente angegeben.

In Ihrem Fall, minmax_element Gibt eine zurück pair von device_vector<int>::iterators. Sie können Ihren Code durchführen, indem Sie erstellen result der angemessene pair:

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top