我有一个需要在堆上分配的2d向量,并使用下面的代码行来声明和调整它。
vector<vector<double>> *myArray = new vector<vector<double>>(x, vector<double>(y));
其中x
和y
分别是行数和列数。
当我尝试使用myArray[0][0] = 3.0;
访问向量的元素时,出现以下错误,
错误:没有可行的重载'='
myArray [0] [0] = 3.0;
我很感激任何帮助来解决这个问题。
备注:
行数和列数需要是动态的,因此myArray
位于堆上。
数组需要调整大小,这就是我使用std :: vector的原因。
据我所知,我可以创建一个向量向量(行数),然后在for循环中将每个行元素调整为所需的列数。我不明白的是为什么上面的代码不起作用,因为据我所知它应该执行相同的功能。
答案 0 :(得分:5)
对于某些 strange 无效原因,您正在使用指向矢量的指针。由于operator[]
适用于指针,所以
myArray[0][0] = 3.0;
您实际上是在访问vector<double>
而不是double
,因为myArray[0]
会为您提供vector<vector<double>>
。
显而易见的解决方法是不首先使用指针:
vector<vector<double>> myArray(x, vector<double>(y));
答案 1 :(得分:2)
必须是:
(*dataArray)[0][0] = 3.0