0

私は実際にstruct/classのコンストラクターでベクトルを初期化しようとしています。

私はこれらを思いついた、以下のコンテンツはエラーなしでコンパイルされますが、ベクターのコンテンツを出力しません。理由を知りたいのですが、助けていただければ幸いです!

struct MyInt
{
friend ostream &operator<<(ostream &printout, const MyInt &Qn)
{
    printout<< Qn.value << endl;
    return printout;
}

     int value;
     MyInt (int value) : value (value) {}
};

struct MyStuff
{
    std::vector<MyInt> values;

MyStuff () : values ()
    {
        values.reserve (10); // Reserve memory not to allocate it 10 times...
    }
};

int main()
{
MyStuff *mystuff1;
MyStuff *mystuff2;

for (int i = 0; i < 10; ++i)
{
        mystuff1->values.push_back (MyInt (i));
}

for (int x = 0; x < 5; ++x)
{
        mystuff2->values.push_back (MyInt (x));
}

vector<MyInt>::iterator VITER;

for (VITER =mystuff1->values.begin(); VITER!=mystuff1->values.end(); ++VITER)
{
    cout<< *VITER;
}

return 0;
}
4

1 に答える 1

2

未定義の動作。ポインタが無効です。ここではポインタはまったく必要ないので、値を指定してください。

MyStuff mystuff1, mystuff2;

// ...
mystuff1.push_back(...); // et cetera

また、予約しない場合でも、10回は割り当てられません。vector実装は、容量が毎回1ずつ増えないほど賢いです。

于 2012-05-12T18:53:13.250 に答える