2012-03-27 9 views
-1

なぜ私はマルチベクトルをC++で持つことができないのだろうか、この例を見てください。C++でマルチベクトルを作る方法

コードには2つの部分しかありません。ベクトルを操作する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

+0

「動作していません」と定義します。 –

+0

何をしようとしていますか? –

答えて

1

ベクターには最初に作成された要素がありません。あなたが存在しない要素への書き込みしようとしていることと思いますので、

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

:だから、このような何かを行うことはできません。あなたが存在しない要素にアクセスしている

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

:あなたが知られているサイズの2Dベクトルをしたい場合は

は、一つの選択肢は、サイズを指定することです。あらかじめベクトルを構築する必要があります。あなたのベクトルの大きさを想定し

MyVec v;からMyVec v(2, vector<double>(5, 0));

foo()で宣言を交換する。これは、基本的には2つのベクトルの要素を含むようにVを構築され、それらの2つのベクトル要素を順番に5を含むように構築されている、v[2][5]あります要素は0で初期化されます。

次に、入れ子にされたforループを完全に削除できます。

かなり正直に言うと、あなたが本当に必要なのはこれです:

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; 
} 
関連する問題