Вопрос
В настоящее время я пытаюсь использовать библиотеку тяги, и у меня возникают проблемы с типами возврата.
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());
дает ошибку:
error : no suitable conversion function from "const thrust::detail::normal_iterator<thrust::device_ptr<int>>" to "int *" exists
Может ли кто -нибудь объяснить мне, как решить, каким должен быть тип возврата?
Согласно документация тип возврата
thrust::pair<ForwardIterator,ForwardIterator>
Однако это не работает для меня, может ли кто -нибудь объяснить!
Спасибо!
Решение
При названии параметра шаблона, ForwardIterator
не называет какой -либо конкретный тип. Для наших целей мы можем думать об этом как о заполнителе для типа итератора, данного thrust::minmax_element
:
template<typename ForwardIterator>
thrust::pair<ForwardIterator,ForwardIterator> minmax_element(ForwardIterator first, ForwardIterator last);
Так minmax_element
Возвращает а pair
любого типа итератора дается ему в качестве аргументов.
В твоем случае, minmax_element
Возвращает а pair
из device_vector<int>::iterator
с Вы можете сделать свой код компиляцией, сделав result
соответствующий 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);