2012-03-27 58 views
-1

我想知道爲什麼我不能在C++中使用多向量?請看看這個例子,雖然它不工作。如何在C++中製作多向量

只有兩部分代碼,foo函數來操縱向量和主要函數來回顯它們。

typedef vector< vector<double> > MyVec; 

MyVec foo() { 
    MyVec v;  

    for (int index=0; index < 2; index ++) { 
     for (int j=0; j<5; j++) { 
      v[index][j]; 
     } 
    } 

    return v; 
} 

int main() { 
    MyVec z = foo(); 

    for (int i = 0; i < z.size(); i++) { 
     cout << z[i][1];      
    } 

    return 0; 
} 
+1

「它不工作」。當真? – tenfour 2012-03-27 23:07:06

+0

定義「不工作」。 – 2012-03-27 23:07:19

+0

你想做什麼? – 2012-03-27 23:07:50

回答

1

向量在第一次創建時沒有任何元素。所以你不能這樣做:

std::vector<double> vec; 
vec[1] = 42.0; 

因爲你會試圖寫入一個不存在的元素。

如果你想要一個已知大小的2D矢量,一個選項是指定大小:

MyVec v(NUM_ROWS); 
for (int i = 0; i < NUM_ROWS; i++) { 
    v[i].resize(NUM_COLS); 
} 
2

你訪問不存在的元素。您需要預先構建載體。

假設你的載體的尺寸是v[2][5],從MyVec v;替換foo()聲明到MyVec v(2, vector<double>(5, 0));

這基本上構建v至包含2個矢量元素,並且這些2個矢量元素依次被構建爲含有5元素初始化爲0.

然後,您可以完全刪除嵌套的for-loop。

老實說,你真正需要的是這樣的:

typedef vector< vector<double> > MyVec; 

int main() { 
    MyVec z(2, vector<double>(5, 0)); 

    for (int i = 0; i < z.size(); i++) { 
     cout << z[i][1];      
    } 

    return 0; 
}