私は を持っていてvector<CustomClass*>
、ベクトルに多くの項目を入れており、高速アクセスが必要なので、リストは使用しません。ベクターの初期サイズを設定するにはどうすればよいですか (たとえば、20 000 の場所に設定すると、新しい挿入時にコピーを避けることができます)?
質問する
320863 次
2 に答える
212
std::vector<CustomClass *> whatever(20000);
また:
std::vector<CustomClass *> whatever;
whatever.reserve(20000);
前者は、配列の実際のサイズを設定します。つまり、配列を 20000 個のポインターのベクトルにします。後者はベクトルを空のままにしますが、20000 個のポインター用のスペースを予約するため、再割り当てすることなく (最大で) 挿入できます。
少なくとも私の経験では、これらのいずれかがパフォーマンスに大きな違いをもたらすことはかなりまれですが、状況によってはどちらも正確さに影響を与える可能性があります。特に、再割り当てが行われない限り、ベクトルへのイテレータは有効なままであることが保証され、サイズ/予約済みスペースを設定すると、再割り当てがない限り再割り当てがないことが保証されます。それ以上サイズを大きくしないでください。
于 2012-07-12T17:49:04.033 に答える
19
reserve 関数を使用して初期割り当てサイズを設定するか、初期コンストラクターで実行する必要があります。
vector<CustomClass *> content(20000);
また
vector<CustomClass *> content;
...
content.reserve(20000);
reserve()
エレメントを作成するとvector
、(少なくとも?) その数のエレメントに十分なスペースが割り当てられます。要素は に存在しませんvector
が、メモリを使用する準備ができています。push_back()
メモリが既に割り当てられているため、これにより速度が向上する可能性があります。
于 2012-07-12T17:48:50.210 に答える