1. ホーム
  2. c++

[解決済み] std::vectorの初期サイズを設定するには?

2022-04-27 02:36:37

質問

私は vector<CustomClass*> で、ベクターにたくさんのアイテムを入れ、高速にアクセスする必要があるので、リストは使いません。ベクターの初期サイズ(例えば、新しいものを挿入するときにコピーを避けるために、20 000の場所にする)を設定するにはどうすればよいですか?

解決方法は?

std::vector<CustomClass *> whatever(20000);

または

std::vector<CustomClass *> whatever;
whatever.reserve(20000);

前者は配列の実際のサイズを設定します。つまり、20000個のポインタを持つベクトルになります。後者はベクトルを空にしますが、20000個のポインタのための領域を確保します。したがって、再割り当てすることなく、その数だけ挿入することができます。

少なくとも私の経験では、どちらも性能に大きな差が出ることはかなり珍しいのですが、状況によっては正しさに影響を与えることがあります。特に、再割り当てが行われない限り、ベクターへのイテレータは有効であることが保証されますし、一度サイズと予約領域を設定すれば、それ以上サイズを大きくしない限り、再割り当てが行われないことが保証されます。