2016-09-04 20 views
0

構造体の2Dベクトルを作成して使用しようとしています。しかし、物事は機能していません。私が使用しているコードスニペットは次のとおりです。2Dベクトルを初期化して使用できません

struct Node 
{ 
int a,b; 
Node() : a(-1) , b(-1){}; 
};  
int m =5; n=4;  
vector<vector<Node>>T; 
    T.resize(m, vector<Node>(0)); 
    for (int i = 0; i < m; i++) 
     { 
      T[i].resize(n, Node()); 
     } 

これを実行すると、ベクトルサイズは正しく初期化されますが、容量は正しくありません。具体的には、Tはsize = capacity = 5を有するが、全てのT [i]はサイズ4及び容量1を有する。 それにもかかわらず、要素値は正しく初期化されているようである。 See here 2番目に、後でベクターを修正しようとすると、それを行うことができません。この実行の

for (int i = 0; i < m; i++) 
     for (int j = 0; j < n; j++) 
     { 
     T[i][j].a= -1; 
     T[i][j].b= -1; 
     } 

、最初の要素(T [0] [0])が正しく更新されるが、後続の反復は、ランダム要素を更新する原因となっています。 私は何が間違っているのか理解できません。

私は

vector<vector<Node>>T(m, vector<Node>(n)); 

として初期化してみました。しかし、まだ値を修正するには、同じ問題に直面しています。

+0

はあるが、ここでは細かい動作するようです私は初期化を 'ベクトル> T(m、ベクトル(n、Node()));' –

+0

に集約しました。コンパイルにVS 2015を使っています。私はgccでテストしたところ、動作しているようです。コンパイラのバグは可能でしょうか? – user3637767

+0

Visual StudioはSTLテンプレートの友人ではありませんでした:)それは可能ですが、私はVSのエキスパートに(実際には巨大なバグであるので)もっと言わせます。たぶんあなたはいくつかのサービスパックを逃しているでしょうか? –

答えて

0

私は「更新5のVisual Studio 2013」あなたのコードをコピーしては、次のことを示しています。心配しないでください Link

、あなたは、IDE内だけでバグを持っている;)

関連する問題