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

Posted

技术标签:

【中文标题】将 1D 向量作为行推入 2D 向量数组【英文标题】:Push_back 1D Vector as Row into 2D Vector Array 【发布时间】:2012-03-01 18:41:22 【问题描述】:

我正在尝试定义“行”或一维向量的值,然后将该行推回为二维向量。我尝试了几种不同的方法,它们不会引发错误,但似乎也不起作用。代码如下:

#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;

【问题讨论】:

【参考方案1】:

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

【讨论】:

显然我没有足够的声望来支持你。不过谢谢!【参考方案2】:

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

当你打印向量的内容时,你只打印第一个WIDTH项,即使向量包含更多,所以你看不到额外的项。

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于将 1D 向量作为行推入 2D 向量数组的主要内容,如果未能解决你的问题,请参考以下文章

将对象推入向量的问题

将结构向量推入结构?

将向量的值传递给特征库格式[重复]

具有 3 列和未声明行数的 2D 向量

为啥我不能将整数向量推入 C++ 中的二维整数向量?

保持 Numpy 数组 2D