2012-03-01 181 views
3

我试图定义“行”或1D向量的值,然后push_back将该行转换为二维向量。我已经尝试过几种不会抛出错误但不起作用的东西。下面的代码:Push_back一维向量行作为二维向量阵列

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

回答

7

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

+0

显然我没有足够的信誉来upvote你。但是,谢谢! – ProGirlXOXO 2012-03-01 22:27:31

1

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

3

push_back()将一个项目追加到该向量的末尾。如果载体包含WIDTH项目,则其包含push_back()之后的WIDTH+1项目。

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

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