0

これは私が使用したコードです。しかし、それはうまくいきません。new_end に問題があります。

thrust::device_vector<int> keys;
thrust::device_vector<int> values;
// after initialization.

pair<int*, int*> new_end;
new_end = thrust::unique_by_key(keys.begin(), keys.end(), values.begin());
keys.resize(thrust::distance(keys.begin,new_end.first));
values.resize(thrust::distance(values.begin(), new_end.right));
4

1 に答える 1

3

このコードには多くの問題があります。

  1. thrust::unique_by_key使用されるベクター型に適した反復子のペアを返します。この場合、使用して thrust::device_vector<int>いるため、返されるイテレータの型はそうではあり thrust::device_vector<int>::iteratorません(ドキュメントに記載されている例から int*おそらくピックアップしたと思います。)int*

    したがって、代わりに:

    pair<int*, int*> new_end;
    

    試す:

    thrust::pair<thrust::device_vector<int>::iterator, thrust::device_vector<int>::iterator> new_end;
    
  2. new_end.right意味がありません。おそらくあなたは意味しましたnew_end.secondか?

  3. あなたは使用できませkeys.beginkeys.begin()

上記の変更により、少なくとも、示したコードをコンパイルできるようになります。

于 2013-07-11T04:02:07.733 に答える