4

参考文献を読んで、std::vector私はそれを理解しました

  1. insert最大容量に達したときに呼び出すとstd::vector、新しいメモリがより大きな容量で割り当てられるため、(イテレータの無効化の原因となる)再割り当てが発生します。目標は、連続するデータについての保証を維持することです。

  2. 最大容量を下回っている限り、それinsertは発生しません(そしてイテレータは無傷になります)。

私の質問は次のとおりです。

reserveによって自動的に呼び出される場合insert、予約する必要のある新しいメモリの量を制御する方法はありますか?

初期容量が100のベクトルがあり、最大容量に達したときに、追加の20バイトを割り当てたいとします。

それは可能ですか?

4

1 に答える 1

5

いつでも自分で追跡して、割り当てる前に予約を呼び出すことができます。

static const int N = 20 // Amount to grow by
if (vec.capacity() == vec.size()) {
  vec.reserve(vec.size() + N);
}
vec.insert(...);

これを独自の関数でラップして、直接呼び出す代わりにその関数を呼び出すことができますinsert()

于 2012-06-02T10:16:44.487 に答える