簡體   English   中英

Push_back 1D向量作為行進入2D向量數組

[英]Push_back 1D Vector as Row into 2D Vector Array

我正在嘗試定義'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;
}

當你push_back currentRow時,array2D已經包含HEIGHT行,而在push_back之后它將包含HEIGHT + 1行。 您只是不顯示您添加的最后一個,只顯示第一個HEIGHT行。

push_back()將一個項追加到向量的末尾。 如果向量包含WIDTH項,則它在push_back()之后包含WIDTH+1項。

當您打印向量的內容時,您只打印第一個WIDTH項目,即使向量包含更多項目,因此您不會看到其他項目。

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

當您真正想要使用reserve方法時,您正在使用resize 問題是resize確實改變了向量的內容,而reserve只是改變了存儲容量。 因此,如果您將向量調整為N個元素,然后將一些元素推入其中,它們將被推入位置N,N + 1等,而如果您只保留N個元素的大小,則它們將被推入位置0,1等等,這是你似乎想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM