2012-03-01 184 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()方法找出向量中有多少項。