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!
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>::iterator
s. 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);