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));
として初期化してみました。しかし、まだ値を修正するには、同じ問題に直面しています。
はあるが、ここでは細かい動作するようです私は初期化を 'ベクトル> T(m、ベクトル(n、Node()));' –
に集約しました。コンパイルにVS 2015を使っています。私はgccでテストしたところ、動作しているようです。コンパイラのバグは可能でしょうか? – user3637767
Visual StudioはSTLテンプレートの友人ではありませんでした:)それは可能ですが、私はVSのエキスパートに(実際には巨大なバグであるので)もっと言わせます。たぶんあなたはいくつかのサービスパックを逃しているでしょうか? –