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.begin 我猜你的意思keys.begin()

上述更改至少应该允许您显示的代码编译。

于 2013-07-11T04:02:07.733 回答