動的な拡張が必要なく、コンパイル時にバッファーのサイズがわからない場合、 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
.