Push_back 1D向量作为行进入2D向量数组

时间:2012-03-01 18:41:22

标签: c++ arrays syntax vector push-back

我正在尝试定义'row'或1D向量的值,然后将该行push_back到2D向量中。我尝试了几个不会抛出错误而且似乎也无法正常工作的不同东西。代码如下:

#include <vector>
#include <iostream>
using std::vector;

#define HEIGHT 5
#define WIDTH 3

// 2D VECTOR ARRAY EXAMPLE

int main() {
vector<vector<double> > array2D;
vector<double> currentRow;

// Set up sizes. (HEIGHT x WIDTH)
// 2D resize
array2D.resize(HEIGHT);
for (int i = 0; i < HEIGHT; ++i)
{
  array2D[i].resize(WIDTH);
}
// Try putting some values in
array2D[1][2] = 6.0; // this works
array2D[2].push_back(45); // this value doesn't appear in vector output.  Why?

// 1D resize
currentRow.resize(3);

// Insert values into row
currentRow[0] = 1;
currentRow[1] = 12.76;
currentRow[2] = 3;

// Push row into 2D array
array2D.push_back(currentRow); // this row doesn't appear in value output.  Why?

// Output all values
for (int i = 0; i < HEIGHT; ++i)
{ 
  for (int j = 0; j < WIDTH; ++j)
    {  
        std::cout << array2D[i][j] << '\t';
  }
  std::cout << std::endl;
 }
 return 0;
}

3 个答案:

答案 0 :(得分:7)

当你push_back currentRow时,array2D已经包含HEIGHT行,而在push_back之后它将包含HEIGHT + 1行。您只是不显示您添加的最后一个,只显示第一个HEIGHT行。

答案 1 :(得分:3)

push_back()将一个项目附加到向量的末尾。如果向量包含WIDTH项,则它包含WIDTH+1之后的push_back()项。

当您打印矢量的内容时,您只打印第一个WIDTH项目,即使矢量包含更多项目,因此您看不到其他项目。

您可以使用size()方法找出向量中有多少项。

答案 2 :(得分:1)

当您确实想要使用resize方法时,您正在使用reserve。问题是resize确实改变了向量的内容,而reserve只是改变了存储容量。因此,如果您将向量调整为N个元素,然后将一些元素推入其中,它们将被推入位置N,N + 1等,而如果您只保留N个元素的大小,则它们将被推入位置0,1等等,这就是你想要的。