2

繰り返しpush_back()を使用してベクトルを初期化する際の問題

したがって、私のプログラムには、doubleとdouble配列のみを含む構造体があります。

struct Particle {
    double x[2];
    double v[2];
    double pressure;
    .......
};

次のようにベクトルの1つを初期化すると、次のようになります。

    std::vector<Particle> p_vec(2500);  

すべて正常に動作しますが、その行を次のように置き換えると次のようになります。

    std::vector<Particle> p_vec;
    Particle p; 
    for (int i = 0; i < 2500; i++) p_vec.push_back(p);

私のプログラムはまだforループを通過しますが、後でクラッシュします。

これら2つの方法の間に欠けている違いはありますか?

4

1 に答える 1

5

1つ目は、デフォルトで要素を作成することです。つまり、それらのメンバーは0に初期化されます。

2つ目は、初期化されていない値をコピーすることです。これは未定義の動作です。

ppush_backする前に、適切に初期化してみてください。

于 2013-03-24T21:24:21.287 に答える