19

動的な拡張が必要な​​く、コンパイル時にバッファーのサイズがわからない場合、 if at allunique_ptr<int[]>の代わりにいつ使用する必要がありますか?vector<int>

vectorの代わりに使用すると、パフォーマンスが大幅に低下しunique_ptrますか?

4

5 に答える 5

11

を使用してもパフォーマンスが低下することはありませstd::vectorstd::unique_ptr<int[]>。ただし、ベクトルは成長する可能性があり、ポインターは成長できないため、代替手段は完全に同等ではありません (これは利点または欠点になる可能性があります。ベクトルが誤って成長したのでしょうか?)

値が で初期化されるという事実のように、他にも違いがありますが、配列のstd::vector場合はそうではありません(値の初期化を使用しない限り...)。new

結局のところ、私は個人的には を選択しますがstd::vector<>、それでも を使用せずに C++03 でコーディングしていますstd::unique_ptr

于 2013-08-27T18:18:16.290 に答える
5

std::vector変数のサイズと割り当てられたデータのサイズの両方の長さを、それ自体のデータへのポインターと共に格納します。std::unique_ptrポインタを格納するだけなので、 を使用するとわずかな利点が得られる可能性がありますstd::unique_ptr

vector がイテレータと機能を提供することについてはまだ誰も言及してsize()いません。したがって、イテレータが必要な場合は使用しますstd::vector

于 2013-08-27T19:33:33.690 に答える
1

目的の部分:

いいえ、おそらく2つの間に大きなパフォーマンスの違いはないはずです(ただし、それは実装に依存するため、重要かどうかを測定する必要があります)。

主観的部分:

std::vector.size()andおよび iteratorsのよく知られたインターフェイスを提供し.at()ます。これは、他のあらゆる種類のコードとうまく連携します。を使用std::unique_ptrすると、より基本的なインターフェイスが提供され、詳細 (サイズなど) を個別に追跡できます。したがって、他の制約がなければ、私はstd::vector.

于 2013-08-27T19:44:05.397 に答える