C ++ STLコンテナの比較

コンテナ特徴:

ベクター:典型的な配列コンテナ、メモリサブコンテナを実装するためのC ++標準の厳格な要件は、連続的である必要があり、一定の時間複雑で修飾された任意の要素の唯一の標準C互換STLコンテナは、シーケンスの終わりに挿入される読み出し一定であるが、配列がヘッドに挿入され、時間複雑度はO(n)が削除、新しい要素の任意の位置に挿入することができる時間の複雑性を取り除く、ランダムアクセス、検討する操作を削除挿入。

デック(両端キュー):挿入、削除操作のシーケンスの頭部も一定時間複雑であること以外はSEQ容器は、連続メモリであり、同様のベクターは、新しい要素は、任意の位置に挿入することができる、ランダムアクセス機能があります。

リスト:配列コンテナ、メモリが連続していない、任意の要素にアクセスし、修正時間複雑度はO(n)が挿入され、削除操作を複雑度の時定数であり、新たな構成要素は、任意の位置に挿入することができます。

設定:相関コンテナ要素が複製を許可しない、データは非常に速いスピードを見て、赤 - 黒ツリーに編成され、時間計算量はO(logN個)

マルチセット:連想コンテナ、およびその設定が、Oの時間複雑(logN個)検索機能を備えた、重複要素を許可しません

マップ:アソシエーション・コンテナキーが一意である必要がありO(logN個)の時間計算量を見つけるために、赤黒木に編成キーによって、セットを形成する{キー、値}の方法を記載。

マルチマップ:との違いは繰り返すキーで、同じ地図

カテゴリー:

連続したメモリコンテナ:ベクトル、両端キュー

したがって、時間の、データの挿入、削除、またはそうでない場合はシーケンスの両端を犠牲にストレージがある場合、それは、あるため、同時に新しい要素のための部屋を作るか、スペースを埋めるの要素を削除するには、ことを確認する必要があり、非常に大きな、連続したメモリをとるよう複合構造体は、(このギャップ、議論の要約で他方を埋めるためにポインタを格納することができる複合構造)次に、コピー動作、多くの時間を過ごすことになります

ノードベースコンテナ:リスト、セット、マルチセット、マップ、マルチマップ

要素の挿入および削除に、このような容器は、場合にのみ、ノードポインタ修飾ので、消費電力は非常に小さいです。

留意事項:
(1)添加元素の多くを必要とします。ベクトル最大の問題の要素を多く、このような状況に適応する能力をリスト私は前に述べたように(複数のメモリブロックで構成)非常に良い、両端キューで、彼はベクトルでありますそして、リストの形での妥協は、メモリは、新しいメモリの申請には十分ではありませんが、古い要素をコピーしません。

(2)検索速度:配列コンテナ船は、その後良いLOGNでソートではなく、最良のnは、関連する容器、記憶部に記憶されたときに、より厳しい(赤黒木で区別されていますバランスの取れたバイナリツリー、最終的に導入している文書)、連想コンテナは、キーの値に従ってソートされているので、常に、時間の数(O(logN個))の複雑さの効率化を図ります。

(3)連続したメモリを:あなたはどこにでも要素を挿入する場合、それは、ベクター、両端キューを考慮していません

(4)要素をソート:関連付けが容易に特定の同値関係に従ってソートされ

(5)かどうか、およびC互換メモリ:適合性ベクター

だから、長所と短所があります:

1ベクトルデータモデルがアレイです。

長所:メモリとCは、効率的なランダムアクセスと完全な互換性があり、省スペース

短所:巨大な、動的なサイズの内側に挿入された要素を削除するコストは、コピーの多くを行うために多くのメモリを適用する能力の必要性を確認しました。

モデルデータ構造の2一覧は、リンクされたリストです

長所:任意の場所に挿入、削除時定数要素の複雑さ、二つの容器の融合が一定時間であります

短所:ランダムアクセスをサポートしていない、ベクトル空間よりも多くのメモリを取ります

3.のDequeデータモデルは、アレイと妥協のリンクリストです:

利点:効率的なランダムアクセスは、プッシュポップの両端内部挿入要素の効率を削除するのは簡単です

短所:比較的高いメモリ使用量

4.マップ、セット、マルチマップ、マルチセットモデルデータ構造は、バイナリツリー(赤黒木)であります

利点:主要な要素は、検索の重要な要素を通じて、マップインデックスは、アクセスを提供し、対数時間の複雑さを検索し、に従ってソートになります

おすすめ

転載: www.linuxidc.com/Linux/2019-06/158955.htm
おすすめ