3

我目前正在尝试使用 Thrust 库,但我遇到了返回类型的问题。

  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>

但是,这对我不起作用,有人可以解释一下吗!

谢谢!

4

1 回答 1

4

命名模板参数时,ForwardIterator不命名任何特定类型。出于我们的目的,我们可以将其视为给定的迭代器类型的占位符thrust::minmax_element

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

因此minmax_element返回pair作为参数提供给它的任何类型的迭代器。

在您的情况下,minmax_element返回 a pairof device_vector<int>::iterators。您可以通过制作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);
于 2011-07-27T08:53:58.580 回答