ベクトルとリストの違い

あなたは、ベクトルの違いについて話して、より詳細なアプリケーションより良いをリスト?

1、概念:

1)ベクトル

連続的な貯蔵容器、ダイナミックアレイ、ヒープ上に割り当てられた空間

基本となる実装:配列

2倍の容量の成長:

ベクター増加(挿入)新しい要素、時間の容量を超えていない場合は、次に左スペースがある場合、(指定された場所を挿入)、最後に直接添加した場合、その後イテレータを調整します。

何の残りのスペースがない場合は、スペースが前に二度の要素の元の数、スペースと新しいコピーを初期化する方法により、元の空間、再びスペースを増やすために、新しい要素、そして最後にデストラクタリリースの要素元の空間を再構成しますイテレータは失敗します。

パフォーマンス:

訪問:O(1)

挿入:終了(十分なスペース)で挿入します。すぐに

メモリの割り当てと開放の必要性だけでなく、前のデータのコピー:最後の挿入(足りないスペース)で。

介入(十分なスペース)で:メモリコピー

介入(十分なスペース)では:適用し、メモリ、およびコピーする前にデータを解放する必要があります。

削除:最後を削除します。すぐに

メモリコピー:削除の途中で

該当するシーン:頻繁にランダムアクセス、および多くの場合、非テールノードの挿入や削除をしないでください。

2)一覧

ヒープ領域に割り当てられた動的リスト、それぞれのメタデータを挿入するには、各要素がスペースを解放するために削除され、スペースが割り当てられます。

下:二重リンクリスト

パフォーマンス:

アクセス:ランダムアクセス性能は急速に最初と最後のノードにアクセスするために、貧しい人々です。

挿入:すぐに、一般的に一定のオーバーヘッドを

削除:すぐに、一般的に一定のオーバーヘッドを

該当するシーン:多くの場合、大量のデータを削除して挿入

2との差:

1)実装の基礎となるベクターは配列であり、リストは二重にリンクされたリストです。

2)ベクターは、リストがサポートされていない、ランダムアクセスをサポートしています。

3)ベクトルは、シーケンスメモリ、リストではありません。

4)中間ノードにおける挿入および欠失のためのベクターは、メモリコピーを引き起こし、リストではありません。

5)メモリのベクトルの時間配分が良いだけでなく、2倍の拡大であり、新しいノードがメモリ・アプリケーションになります挿入するたびにリストアップ。

ランダムアクセス性能の6)ベクター、パフォーマンスの低下挿入及び欠失、ランダムアクセス性能、挿入および欠失性能の乏しいリスト。

3.アプリケーション

ベクトルは、すぐに効率的なアクセスのために必要がある場合ではなく、効率の挿入や削除、ベクターを用いて、ランダムアクセスをサポートし、連続したメモリ空間を持っています。

リストにはないランダムアクセスでの効率的な挿入および欠失を、必要がある場合は、リストを使用する必要があり、連続したメモリ空間の期間を持っていません。

おすすめ

転載: www.cnblogs.com/kandid/p/11369057.html