使用operator []无法访问2d堆向量的元素

时间:2015-01-17 10:38:31

标签: c++ c++11 vector multidimensional-array heap

我有一个需要在堆上分配的2d向量,并使用下面的代码行来声明和调整它。

vector<vector<double>> *myArray = new vector<vector<double>>(x, vector<double>(y));

其中xy分别是行数和列数。

当我尝试使用myArray[0][0] = 3.0;访问向量的元素时,出现以下错误,

错误:没有可行的重载'='

myArray [0] [0] = 3.0;

我很感激任何帮助来解决这个问题。

备注:

  1. 行数和列数需要是动态的,因此myArray位于堆上。

  2. 数组需要调整大小,这就是我使用std :: vector的原因。

  3. 据我所知,我可以创建一个向量向量(行数),然后在for循环中将每个行元素调整为所需的列数。我不明白的是为什么上面的代码不起作用,因为据我所知它应该执行相同的功能。

2 个答案:

答案 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