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

あなたの場合、 s の aをminmax_element返します。適切なを作成することで、コードをコンパイルできます。pairdevice_vector<int>::iteratorresultpair

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 に答える