動的な拡張が必要なく、コンパイル時にバッファーのサイズがわからない場合、 if at allunique_ptr<int[]>の代わりにいつ使用する必要がありますか?vector<int>
vectorの代わりに使用すると、パフォーマンスが大幅に低下しunique_ptrますか?
動的な拡張が必要なく、コンパイル時にバッファーのサイズがわからない場合、 if at allunique_ptr<int[]>の代わりにいつ使用する必要がありますか?vector<int>
vectorの代わりに使用すると、パフォーマンスが大幅に低下しunique_ptrますか?
を使用してもパフォーマンスが低下することはありませstd::vectorんstd::unique_ptr<int[]>。ただし、ベクトルは成長する可能性があり、ポインターは成長できないため、代替手段は完全に同等ではありません (これは利点または欠点になる可能性があります。ベクトルが誤って成長したのでしょうか?)
値が で初期化されるという事実のように、他にも違いがありますが、配列のstd::vector場合はそうではありません(値の初期化を使用しない限り...)。new
結局のところ、私は個人的には を選択しますがstd::vector<>、それでも を使用せずに C++03 でコーディングしていますstd::unique_ptr。
std::vector変数のサイズと割り当てられたデータのサイズの両方の長さを、それ自体のデータへのポインターと共に格納します。std::unique_ptrポインタを格納するだけなので、 を使用するとわずかな利点が得られる可能性がありますstd::unique_ptr。
vector がイテレータと機能を提供することについてはまだ誰も言及してsize()いません。したがって、イテレータが必要な場合は使用しますstd::vector
目的の部分:
いいえ、おそらく2つの間に大きなパフォーマンスの違いはないはずです(ただし、それは実装に依存するため、重要かどうかを測定する必要があります)。
主観的部分:
std::vector.size()andおよび iteratorsのよく知られたインターフェイスを提供し.at()ます。これは、他のあらゆる種類のコードとうまく連携します。を使用std::unique_ptrすると、より基本的なインターフェイスが提供され、詳細 (サイズなど) を個別に追跡できます。したがって、他の制約がなければ、私はstd::vector.