重複の可能性:
ベクトル/文字列ではなく配列を使用するのはいつですか?
std::arrayとstd::vectorの違いは何ですか?いつ使用しますか?
私は常にすべてにベクトル(動的配列)を使用しますが、通常の配列を使用することはありません。たとえば、ベクトルが適合せず、通常の配列が関数に適合する場合があるなど、これには欠点がありますか?
重複の可能性:
ベクトル/文字列ではなく配列を使用するのはいつですか?
std::arrayとstd::vectorの違いは何ですか?いつ使用しますか?
私は常にすべてにベクトル(動的配列)を使用しますが、通常の配列を使用することはありません。たとえば、ベクトルが適合せず、通常の配列が関数に適合する場合があるなど、これには欠点がありますか?
ほとんどすべての状況で、vector
が望ましいです。そのメモリはフリーストア(大規模な割り当て用に設計されています)から割り当てられ、自動的に管理されます。必要に応じて、配列自体へのポインタを簡単に取得できます。
次の場合は、配列(組み込みまたはのいずれかstd::array
)を使用します。
Bjarne Stroustrupによると、配列を使用する本当に正当な理由がない限り、配列よりもベクトルを使用する必要があります。
ベクトルは動的に成長する配列です。一方、配列は静的です。最初に配列を定義する必要があり、再割り当てすることはできません。ベクトルを使用すると、固定サイズを宣言するという制限はありません。空のベクトルから始めて、好きなだけ成長させ続けることができます。日付まで、アレイがより適している状況は見つかりませんでした。実際、ベクトルを使用すると、配列で直面する多くの問題の多くが解決されることがわかりました。常にベクトルを使用するのは非常に良い習慣だと思います。
それをやり続けます!!!!
状況に最も適したものを使用してください。固定サイズの配列の私のお気に入りの利点の1つを、簡単な例とともに以下に概説します。
サイズが不明な場合、または実行時にストレージを増やす必要がある場合は、ベクターを探します。
あらかじめ決められたサイズがある場合は、std :: arrayまたは生のC配列(int foo [256])を使用できます。これは、コードの単純さと速度に利点があります。ここでの最大の利点の1つは、配列に格納されるデータがわかっている場合、Cスタイルの初期化子リストを使用して、ベクトルで発生するセットアップコストをすべて削除し、オプティマイザーが処理を高速化するためのスペースを開くことができることです。デバッグも簡単ですが、次のようになります。
struct KeyPair { int key; string name; };
const KeyPair kFoo[] = { { 0, "0" }, { 1, "1" }, { 2, "2" } };
const string& getName( unsigned int key )
{
assert( key < (sizeof(kFoo)/sizeof(*kFoo)) ); // Check key is a valid index
assert( kFoo[key].key == key ); //< Sanity check - useful is key is an enum which could change
return kFoo[key];
}