矢量初始化推力

时间:2014-07-24 13:28:45

标签: c++ vector thrust

我是C ++的新手,我希望在推力库中有一个具有合理步长的矢量。我写了这些代码,当我试图将向量A定义为指针时,它给了我一个错误。如果有人能告诉我我的代码有什么问题,我会感激不尽。

void Vector_Initialize (thrust::host_vector<double> *A, double lb, double delta)
{
    for (int i = 0; i < A.size(); i++)
        A[i]  = lb + i * delta;
}
int main()
{
    thrust::host_vector<double> h_V(10);
    //thrust::sequence(h_V.begin(), h_V.end(), 20, 0.4);
    double lb=20, delta=0.4;
    Vector_Initialize(h_V, lb, delta);
    for (int i = 0; i < 10; i++)
    {
        std::cout<<h_V[i]<<std::endl;
    }
    std::cout<< "size of vector is" << h_V.size()<<std::endl;
    return 0;

}

这是错误:

Error   1   error : expression must have class type H:\...\kernel.cu    16  1   CUDATUt13
Error   2   error : no operator "=" matches these operands  H:\...\kernel.cu    17  1   CUDATUt13
Error   3   error : identifier "$h_V" is undefined  H:\....\kernel.cu   24  1   CUDATUt13

2 个答案:

答案 0 :(得分:0)

功能应该是

void Vector_Initialize (thrust::host_vector<double>& A, double lb, double delta)

所以A是引用,而不是指针。如果你想使用指针,你应该用

调用函数
Vector_Initialize(&h_V, lb, delta);

和重写函数,用于指向矢量的指针。

答案 1 :(得分:0)

void Vector_Initialize (thrust::host_vector<double> *A, double lb, double delta)

应替换为

void Vector_Initialize (thrust::host_vector<double> &A, double lb, double delta)

*A表示A是指针(可以是一个向量或数组或向量)。 &A表示A是reference

如果您仍想坚持*A(不推荐),请替换

for (int i = 0; i < A.size(); i++)
    A[i]  = lb + i * delta;

for (int i = 0; i < A->size(); i++)
    (*A)[i]  = lb + i * delta;

并将h_V的地址传递给Vector_Initialize函数。