3

したがって、私が理解していることから、reserveは抽象化を初期化せず、それらを含むために単にスペースを割り当てます。ただし、v [0]は常に最初の単一化されたメモリを提供するべきではなく、それに値を割り当てることは常に機能するべきではありませんか?

4

2 に答える 2

9

reserveベクトルのサイズは変更されないためです。必要になったときにベクトルのサイズを大きくするのに十分なスペースがあるメモリ内の場所にベクトルを移動するだけです。

v[0]=2、またはを呼び出すことができることを確認したい場合は、ではなくv[1]=0、を使用する必要があります。resize(2)reserve(2)

于 2012-11-22T02:13:00.487 に答える
1

未定義の動作を呼び出すためです。ライブラリライターは、サイズを変更するまで、begin()のアドレスをnullptrのままにしておくことができます。または、0xBAADFOODに設定します。または、HDDに書き込むときにHDDをフォーマットします。

さて、起こりそうなことは、これが初期化されていないメモリであるということです。したがって、デバッグでのアサートの山と、ベクトルがその状態について存在し、それを修正する方法がないという事実を除いて、恐ろしいことは何も起こりません。

于 2012-11-22T02:33:10.687 に答える