2017-01-06 12 views
0

NxM 2D intベクトルを作成し、そのデフォルト値を作成するにはどうすればよいですか?デフォルト値を使用して2Dベクトル配列を作成する方法は?

は、ここで私はいくつかの値を持つ3×3のint型のベクトルを作成してみてください:

vector< vector<int> > m(3, vector<int> (3)) = { 
    {1,2,9}, 
    {8,4,7}, 
    {5,6,0} 
    }; 

をしかし

> g++ a.cpp -std=c++11 

error: expected ‘,’ or ‘;’ before ‘=’ token 
    vector< vector<int> > m(3, vector<int> (3)) = { 
               ^
error: expected ‘}’ at end of input 
} 

と、このエラーは、私はまた、C++ 11を使用していますので、上記いけません構文は正しい? this answerによれば、それは大丈夫でしょうか?

+1

オススメとして閉じる投票。初期化子リストがそれを置き換えるので、コンストラクタ呼び出しを取り除く。 'ベクトル< vector> m = ...' – NathanOliver

答えて

1

括弧内にあるものを削除すると問題なく動作します。ディメンションは、イニシャライザリストのサイズによって決まります。自分でサイズを指定する場合は、std::arrayを使用できます。

std::vector< std::vector<int> > m= { 
    {1,2,9}, 
    {8,4,7}, 
    {5,6,0} 
    }; 

アレイの初期化は少し異なります。 this questionを参照してください。ダブルブレースが必要です。

vector<vector<int>>(3, vector<int>(3)); 

これはタイプvectorの3つの要素が含まれている新しいベクトルを作成し、それらのそれぞれは、内部3つの整数を持っている:

#include <array> 
std::array< std::array<int, 3>, 3 > m= {{ 
    {1,2,9}, 
    {8,4,7}, 
    {5,6,0} 
    }}; 
+0

2D配列を宣言するときに 'std :: array'と' std :: vector'を使うことの違いは何ですか?あなたはいつ他のものを使いますか? – vuvume

+0

@vuvume 'std :: array'のサイズはコンパイル時に指定され、決して変更できません。 'std :: vector 'のサイズは、実行時に変更することができます。 –

+0

'std :: array'を' int m [3] [3] 'と同じように使っていますか? – vuvume

0

括弧内のコードはvectorのコンストラクタの引数を示します。したがって、nullで、この場合はベクトル内にあります。

このコード:

vector<vector<int>> test = 
    { {3,4,5}, 
     {4,5,6} }; 

初期化子リストを取り、それ自体で得られたベクトルの大きさを推定する別のコンストラクタを使用します。

これらは異なるコンストラクタです。Type object(arg1, arg2);表記を使用してオブジェクトを構築するときは、基本的にコンストラクタをTypeと呼びます。関数を呼び出すのはです。もちろん、関数呼び出しに追加することはできません。

+0

空の3x3配列を初期化したいのですが? 'test [2] [2] == null'にはどうすればアクセスできますか? – vuvume

+0

@vuvume: 'null' ??無作為に推測を止めなさい - プログラミングはそのようには機能しません。とにかく、空の3x3配列のようなものはありません。配列には要素が含まれているか、配列に要素がありません。 –

+0

@vuvume、私は私の答えを更新しました – ForceBru

関連する問題