为什么这个不能访问向量的位置
Why is this not accessing the vector position?
我正在为我的类写一个回溯问题,我必须实现一些现有的函数。这是我要实现的函数之一。void *input
是我们应该传递数据的地方,在我的例子中是一个二维向量。
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];
}
}
然而,我相信我的cast有问题,因为我在sumweight += a[i]*datavector[i][0];
错误:在'*(a + ((long long unsigned int)(((long long unsigned int)i) * 4ull))中没有匹配'operator*') *(datavector + ((long long unsigned int)(((long long unsigned int)i) * 24ull)))->std::vector<_Tp, _Alloc>::operator[] with _Tp = std::vector, _Alloc = std::allocator>, std::vector<_Tp, _Alloc>::reference = std::vector&, std::vector<_Tp, _Alloc>::reference = std::vector&, std::vector<_Tp, _Alloc>::size_type = long long unsigned int'
如果我尝试使用另一个变量访问向量,如int t1 = datavector[i][0];
,我得到一个错误
错误:初始化时无法将std::vector转换为int
我认为void指针可以用来传递任何东西,只要进行了适当的强制转换。这是怎么回事?
您的datavector
变量是一个指针指向int
的向量的向量,因此您应该应用适当的解引用:
sumweight += a[i] * (*datavector)[i][0];
// ^^^^^^^^^^^^^
sumvalue += a[i] * (*datavector)[i][1];
// ^^^^^^^^^^^^^
此外,:
for (unsigned i=0; i < sizeof(a); i++)
// ^^^^^^^^^
将不计算数组中的元素数量(这使我认为您没有使用的k
参数意味着包含该数组的长度)
首先,你的循环是错误的:
for(unsigned i=0; i<sizeof(a); i++)
sizeof(a)
将始终是sizeof(int*)
,因为无论您的签名如何,都不能将数组传递给函数。实参将是一个指针,因此永远无法正确访问vector对象。
你的下一个问题是你有一个指向一个向量的指针(通常是坏主意),但你没有正确地解引用它。你需要在索引到下一个向量之前解引用(然后到下一个向量…),即
sumweight += a[i] * (*datavector)[i][0];
接下来,问你自己;为什么要处理指向向量的指针指向向量的指针?
- 将值指定给向量(2D)的向量中的某个位置
- 使用迭代器时如何访问对象在向量中的位置?
- 如何将元素添加到向量的字符串位置
- 将一个向量插入另一个向量的某个位置
- 向量的内存位置不连续
- 创建一个类来访问和指定向量类型,并构建一个获取位置并为其分配区域的类
- 如何从字符串向量中选择第 n 个位置?
- 在多维向量中的特定位置添加一个值
- 如果不初始化结构中的向量,它会自动为空还是具有随机内存位置的值?
- 如何在向量中保存位置以供以后插入?
- 查找 2D 向量的位置,该向量是类C++的一个元素
- 使用向量的函数崩溃,调试器说访问冲突读取位置
- 如何使用向量 c++ 迭代文件中单词的位置
- 在 c++ 中检查 if 条件中的向量位置范围
- 这是查找向量中元素位置的合法方法吗?
- 如何在C 2D向量中找到对象(而不是int)的位置
- C 从特定位置插入其他向量中的载体
- 向量如何在特定位置调用复制构造函数
- 如何在特定位置不大的推动_back向量
- 嵌套的向量迭代忽略外部向量位置