2つの関数は大きく異なることをします!
resize()
方法(およびコンストラクタへの引数を渡すことと同等である)は、(それがその値を指定するためのオプションの第二引数を有する)サイズ所与作るためにベクターに要素の適切な番号を挿入または削除されます。これはに影響しsize()
、反復はこれらすべての要素を調べ、push_backはそれらの後に挿入し、を使用してそれらに直接アクセスできますoperator[]
。
このreserve()
メソッドはメモリを割り当てるだけですが、初期化されていません。それが唯一の影響capacity()
はなく、size()
変更されません。ベクトルには何も追加されないため、オブジェクトには値がありません。次に要素を挿入すると、事前に行われたため、再割り当ては行われませんが、それが唯一の効果です。
ですから、それはあなたが望むものに依存します。1000のデフォルトアイテムの配列が必要な場合は、を使用しますresize()
。1000個のアイテムを挿入する予定の配列が必要で、2、3の割り当てを避けたい場合は、を使用しますreserve()
。
編集: Blastfurnaceのコメントにより、質問をもう一度読んで、あなたの場合、正しい答えは手動で事前に割り当てられないことに気づきました。必要に応じて、最後に要素を挿入してください。ベクターは、必要に応じて自動的に再配分し、それを行いますより効率的にマニュアルの方法が述べたよりも。reserve()
意味のある唯一のケースは、事前に簡単に利用できる必要がある合計サイズのかなり正確な見積もりがある場合です。
EDIT2:広告の質問の編集:最初の見積もりがある場合は、reserve()
その見積もりです。それが十分でないことが判明した場合は、ベクターにそれをさせてください。
std::vector
。