2016-07-23 6 views
-6

私はSTLベクターについてよく知っています。しかし、私はと呼ばれるコンストラクタと私は、次のようなベクトルを初期とき、それが何を知りたいのです:std :: vector <int> vec [nx] [ny];

int nx=5; int ny=7; std::vector<int> myvec[nx][ny];

更新: 私はTDM-GCC 4.9.2を使用してコードをコンパイルしたが、どうやらそれ他のコンパイラでは "const int"で初期化する必要がありますので、ここで書き直してください:

ありがとうございました。あなたは63個のstd ::ベクトルではなく、1つの2Dベクトルを作成しているので、

+1

私はあなたがベクトル(7x9)の2次元配列ではなく、2Dベクトルを作成している実現を願っています。 – rustyx

答えて

4

は63倍事実here

からコンストラクタ1呼び出されます。

コンパイルされます。しかし、それはすべきではない。ここにはVLAがあります。これは有効なC++コードではありません。

+2

このコードは完璧です。それはタイプベクトルの行= 7とcol = 9の2次元配列を作成します rj99999

+0

@ rj99999最初のコードサンプルは有効ではありませんC + +。 – juanchopanza

+0

なぜそれが有効なC++ではないと思いますか?変数を宣言するために使用されている変数について話していますか?つまり、実際にはコンパイラに依存し、多くのコンパイラでコードがコンパイルされます。試してみてくださいgcc – rj99999

2

変数nxnyは、可変長配列が標準C++ではないため、修飾されたconstである必要があります。

しかし、const intにこれらの変数を変更する場合、これは2次元配列の各要素は、最初intタイプの空のベクターであるように、5行デフォルト-初期化std::vector<int>インスタンスの7列の2次元配列を宣言する。

これはそういうことですが、これはあなたがこれのような何かをしなければならないと言っているわけではありません - std::vectorオブジェクトの2D Cスタイルの配列は奇妙な構造です。あなたは、各要素がstd::vectorで固定された行列をしたい場合は、代わりに(例えば)以下を使用します。

std::array<std::array<std::vector<int>, 7>, 5> mtx_vec; 
+0

お返事ありがとうございます。 – Eman

関連する問題