将1D矢量作为行推入2D矢量阵列

Push_back 1D Vector as Row into 2D Vector Array

本文关键字:2D 阵列 1D      更新时间:2023-10-16

我试图定义一个"行"或1D向量的值,然后将该行推回到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;
}

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

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

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

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

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