使用unique_by_key后如何调整device_vector的大小?

时间:2013-07-11 03:37:37

标签: cuda resize unique distance thrust

这是我使用的代码。 但它无法奏效。 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));

1 个答案:

答案 0 :(得分:2)

此代码存在许多问题。

  1. thrust::unique_by_key将返回一对迭代器 适用于所用的矢量类型。在这种情况下,您正在使用 thrust::device_vector<int>所以返回的迭代器类型是 thrust::device_vector<int>::iterator不是int*(我猜你 可能从中给出的示例中选择了int* documentation。)

    所以而不是:

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

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