将1D向量作为行推入2D向量数组的尾部

3
我正在尝试定义“行”或1D向量的值,然后将该行(row)插入到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个回答

7

在你执行push_back currentRow操作时,array2D已经包含HEIGHT行数据,而在push_back操作之后将会有HEIGHT+1行。你只是不展示你添加的最后一行,只显示前面HEIGHT行。


显然我没有足够的声望来为你点赞。但还是谢谢! - ProGirlXOXO

3

push_back()函数将一个项目添加到向量的末尾。如果向量包含WIDTH个项目,则在执行push_back()操作后,它包含WIDTH+1个项目。

当您打印向量的内容时,即使向量包含更多的项目,您也只会打印前WIDTH个项目,因此您不会看到额外的项目。

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


1

你实际上应该使用reserve方法而不是resize。原因是resize会改变vector的内容,而reserve只会改变存储容量。所以,如果你将一个vector调整为N个元素,然后往里面添加一些元素,它们将被放置在位置N、N+1等等,而如果你只是预留了N个元素的大小,它们将被放置在位置0、1等等,这似乎是你想要的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接