C ++の配列とベクトルの違いは何ですか?違いの例としては、ライブラリ、象徴性、能力などがあります。
アレイ
配列には、特定のタイプの特定の数の要素が含まれています。プログラムのコンパイル時に必要な量のスペースをコンパイラーが予約できるように、配列が定義されるときに含まれる要素のタイプと数を指定する必要があります。コンパイラーは、プログラムのコンパイル時にこの値を判別できる必要があります。配列が定義されたら、配列の特定の要素にアクセスするために、インデックスと共に配列の識別子を使用します。[...]配列のインデックスはゼロです。つまり、最初の要素はインデックス0にあります。このインデックススキーマは、C ++でのポインターと配列の間の密接な関係と、言語がポインター演算用に定義するルールを示しています。
— C ++ Pocketリファレンス
ベクター
ベクトルは、配列スタイルの
operator[]
ランダムアクセスを提供する動的にサイズ変更されたオブジェクトのシーケンスです。メンバー関数はpush_back
、コピーコンストラクターを介して引数をコピーし、そのコピーをベクターの最後のアイテムとして追加し、サイズを1ずつ増やします。pop_back
最後の要素を削除することにより、まったく逆のことを行います。ベクターの最後からアイテムを挿入または削除するには、一定の償却時間がかかります。他の場所からアイテムを挿入または削除するには、線形時間がかかります。これらはベクターの基本です。彼らにはもっとたくさんあります。ほとんどの場合、ベクトルはCスタイルの配列よりも最初の選択肢です。まず第一に、それらは動的にサイズ設定されます。つまり、必要に応じて拡張できます。C配列の場合のように、最適な静的サイズを見つけるためにあらゆる種類の調査を行う必要はありません。ベクトルは必要に応じて拡大し、必要に応じて手動でサイズを変更できます。次に、ベクトルはat
メンバー関数で境界チェックを提供します(ただし、operator[]
)、単にプログラムのクラッシュを監視するのではなく、存在しないインデックスを参照する場合、またはさらに悪いことに、破損したデータを使用して実行を継続できるようにするためです。— C ++クックブック