我正在为我的课写一个回溯问题,我必须实现一些现有功能。这是我必须实现的功能之一。 void *input是我们应该传递数据的位置,在我的情况下,它是一个二维 vector 。

void process_solution(int a[], int k, void *input, bool *finished)
{
    int sumweight = 0;
    int sumvalue = 0;
    std::vector<std::vector<int> > *datavector = static_cast<std::vector<std::vector<int> >* >(input);
    for(unsigned i=0; i<sizeof(a); i++)
    {
        sumweight += a[i]*datavector[i][0];
        sumvalue += a[i]*datavector[i][1];
    }
}

但是,我认为我的 Actor 表出了点问题,因为在sumweight += a[i]*datavector[i][0];行出现了错误



如果我尝试使用另一个变量来访问 vector ,例如int t1 = datavector[i][0];,则会收到错误消息



我认为空指针可以用来传递任何东西,只要做出正确的转换即可。这里发生了什么?

最佳答案

您的datavector变量是一个指向int vector 的 vector 的指针,因此您应该应用适当的解引用:

sumweight += a[i] * (*datavector)[i][0];
//                  ^^^^^^^^^^^^^

sumvalue += a[i] * (*datavector)[i][1];
//                 ^^^^^^^^^^^^^

此外,这:
for (unsigned i=0; i < sizeof(a); i++)
//                     ^^^^^^^^^

不会计算数组中元素的数量(这使我认为您未使用的k参数意在包含该数组的长度)。

关于c++ - 为什么这不进入 vector 位置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15605458/

10-11 16:22