あなたは、ベクトルの違いについて話して、より詳細なアプリケーションより良いをリスト?
1、概念:
1)ベクトル
連続的な貯蔵容器、ダイナミックアレイ、ヒープ上に割り当てられた空間
基本となる実装:配列
2倍の容量の成長:
ベクター増加(挿入)新しい要素、時間の容量を超えていない場合は、次に左スペースがある場合、(指定された場所を挿入)、最後に直接添加した場合、その後イテレータを調整します。
何の残りのスペースがない場合は、スペースが前に二度の要素の元の数、スペースと新しいコピーを初期化する方法により、元の空間、再びスペースを増やすために、新しい要素、そして最後にデストラクタリリースの要素元の空間を再構成しますイテレータは失敗します。
パフォーマンス:
訪問:O(1)
挿入:終了(十分なスペース)で挿入します。すぐに
メモリの割り当てと開放の必要性だけでなく、前のデータのコピー:最後の挿入(足りないスペース)で。
介入(十分なスペース)で:メモリコピー
介入(十分なスペース)では:適用し、メモリ、およびコピーする前にデータを解放する必要があります。
削除:最後を削除します。すぐに
メモリコピー:削除の途中で
該当するシーン:頻繁にランダムアクセス、および多くの場合、非テールノードの挿入や削除をしないでください。
2)一覧
ヒープ領域に割り当てられた動的リスト、それぞれのメタデータを挿入するには、各要素がスペースを解放するために削除され、スペースが割り当てられます。
下:二重リンクリスト
パフォーマンス:
アクセス:ランダムアクセス性能は急速に最初と最後のノードにアクセスするために、貧しい人々です。
挿入:すぐに、一般的に一定のオーバーヘッドを
削除:すぐに、一般的に一定のオーバーヘッドを
該当するシーン:多くの場合、大量のデータを削除して挿入
2との差:
1)実装の基礎となるベクターは配列であり、リストは二重にリンクされたリストです。
2)ベクターは、リストがサポートされていない、ランダムアクセスをサポートしています。
3)ベクトルは、シーケンスメモリ、リストではありません。
4)中間ノードにおける挿入および欠失のためのベクターは、メモリコピーを引き起こし、リストではありません。
5)メモリのベクトルの時間配分が良いだけでなく、2倍の拡大であり、新しいノードがメモリ・アプリケーションになります挿入するたびにリストアップ。
ランダムアクセス性能の6)ベクター、パフォーマンスの低下挿入及び欠失、ランダムアクセス性能、挿入および欠失性能の乏しいリスト。
3.アプリケーション
ベクトルは、すぐに効率的なアクセスのために必要がある場合ではなく、効率の挿入や削除、ベクターを用いて、ランダムアクセスをサポートし、連続したメモリ空間を持っています。
リストにはないランダムアクセスでの効率的な挿入および欠失を、必要がある場合は、リストを使用する必要があり、連続したメモリ空間の期間を持っていません。