reserve(N)
が複数回すぐに次々と呼ばれていると仮定します。以前のreserve(N1)
は、追加または上書きされますか?
はstd::string
とは異なり、現在capacity()
未満である引数とcapacity()
.Calling reserve()
を縮小するstd::vector
ためreserve()
を呼び出すことができない何もしません。したがって、現在の容量を増加させる最後のreserve()
コールが良好に保たれます。
reserve(N1)
以前は、最新の呼び出しで上書きされます場合は、最新のreserve(Nn)
スロットの少ない数を要求する場合、その後、何が起こりますか?
現在のcapacity()
よりも小さい引数を持つreserve()
を呼び出すことは、何もしません。
単純にpush_back()X要素があればvectorを宣言してから、reserve(N)を呼び出します。既にpush_back()X要素はNでカウントされますか?
reserve()
これだけ割り当て(予約)の要素の十分な数をはい。 reserve()
を呼び出した後、ベクトルのcapacity()
のみが変更されます。size()
は影響を受けません。メモリを予約するだけでなく、多くの要素を作成する必要がある場合は、resize()
を使用する必要があります。
と仮定、ベクトルは、いくつかのX
の要素をプッシュしている場合、今、私たちはpush_back()
1つの以上の要素(X+1)
、そのオブジェクトが再配置されたりしなければならない場合。まだpush_back()
を実行していません。 reserve()
に今すぐ電話するとどうなりますか?オブジェクトはすぐに再配置されますか?そうでない場合、スペースはどのように予約されていますか?
はい、移転が起こるのだろうが、それは依存します。前述のように、reserve()
は、渡された引数と同じ数の要素を格納するのに十分なメモリを割り当てます。したがって、この要素の数が現在のベクトルcapacity()
に収まるものより大きい場合、再配置が行われます。
標準的な参考文献:
C++ 03 23.2.4.2ベクトル容量[lib.vector.capacity]
void reserve(size_type n);
効果:のベクトルを通知指令計画されたサイズの変更により、それに応じてストレージの割り当てを管理することができます。 reserve()
の後、再割り当てが発生した場合、capacity()
はreserveの引数より大きいか等しいです。それ以外の場合は前の値capacity()
に等しくなります。現在の容量がreserve()
の引き数より小さい場合に限り、再割り当てがこの時点で行われます。
複雑さ:シーケンスのサイズは変更されず、シーケンスのサイズで最も線形な時間がかかります。
例外: length_error n > max_size()
0.248場合)
注再配置は、配列の要素を参照するすべての参照、ポインタ、反復子を無効にします。reserve()
への呼び出し後に発生する挿入中に、挿入によりベクトルのサイズが最新の呼び出しで指定されたサイズより大きくなるまで、再割り振りは行われないことが保証されています(reserve()
)。
標準のコピーをお持ちでない場合は、[複数](http://www.sgi.com/tech/stl/Vector.html)[references](http:// en.cppreference.com/w/cpp/container/vector/reserve)オンライン。 –