2013-07-15 13 views
44

だから、私は次のようしている:は、2次元のstdの初期化::ベクトル

std::vector< std::vector <int> > fog; 

と私は同じように非常に単純にそれを初期化しています:

for(int i=0; i<A_NUMBER; i++) 
    { 
      std::vector <int> fogRow; 
      for(int j=0; j<OTHER_NUMBER; j++) 
      { 
       fogRow.push_back(0); 
      } 
      fog.push_back(fogRow); 
    } 

そして、それは非常に間違っている感じです...このようなベクトルを初期化する別の方法がありますか?

+1

'std :: vector :: max_size()'よりも多くのスペースを必要としない場合は、2dベクタに対して1dベクタの実装をお勧めします。 [Here](http://stackoverflow.com/a/13937325/942596) – andre

答えて

93

初期サイズとデフォルト値を受け入れstd::vector::vector(count, value)コンストラクタを使用しますゼロ以外の値は、例えば4を言うなら

std::vector<std::vector<int> > fog(
    A_NUMBER, 
    std::vector<int>(OTHER_NUMBER)); // Defaults to zero initial value 

を、デフォルトであることが要求された:

std::vector<std::vector<int> > fog(
    A_NUMBER, 
    std::vector<int>(OTHER_NUMBER, 4)); 

また、均等初期化については、vectorと他のコンテナの初期化を可能にするC++ 11で導入されました。{}

std::vector<std::vector<int> > fog { { 1, 1, 1 }, 
            { 2, 2, 2 } }; 
23

ありstd::vectorにはappend方法はありませんが、あなたはintA_NUMBERベクトル、other_numberゼロを含むもののそれぞれを含むベクトルを作りたい場合は、あなたがこれを行うことができます。一般的には

std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER)); 
+0

について:ちょうどタイプミス:)ありがとう! – fritzone

+0

それは私たちのために働く、 – mxi1

0

std::vector<std::vector<int> > v (A_NUMBER, std::vector <int> (OTHER_NUMBER, DEFAULT_VALUE)) 

ここで、ベクトル「v」は、2次元配列として視覚化することができます。列が 'OTHER_NUMBER'で初期値が 'DEFAULT_VALUE'に設定されている行が 'A_NUMBER'です。

また、それは次のように書くことができる:2次元ベクトルの値を入力

std::vector <int> line(OTHER_NUMBER, DEFAULT_VALUE) 
std::vector<std::vector<int> > v(A_NUMBER, line) 

は、2次元配列の値を入力するようになります。

for(int i = 0; i < A_NUMBER; i++) { 
    for(int j = 0; j < OTHER_NUMBER; j++) { 
     std::cin >> v[i][j] 
    } 
} 

としては、既にされています他の答えで述べた....!

関連する問題