Pregunta

Actualmente estoy tratando de usar la biblioteca de empuje y tengo problemas con los tipos de devolución.

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

da el error:

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

¿Alguien podría explicarme cómo debe ser el tipo de devolución?

de acuerdo con la documentación El tipo de retorno es

thrust::pair<ForwardIterator,ForwardIterator>

Sin embargo, esto no funciona para mí, ¿podría alguien explicarlo?

¡Gracias!

¿Fue útil?

Solución

Al nombrar un parámetro de plantilla, ForwardIterator no nombra ningún tipo en particular. Para nuestros propósitos, podemos considerarlo como un marcador de posición para el tipo de iterador dado a thrust::minmax_element:

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

Asi que minmax_element Devuelve un pair de cualquier tipo de iterador que se le entregue como argumentos.

En tu caso, minmax_element Devuelve un pair de device_vector<int>::iterators. Puede hacer que su código se compile haciendo result La Apropiada 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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top