2つの違いは何ですか?方法はすべて同じです。したがって、ユーザーにとっては同じように機能します。
あれは正しいですか??
(日付は付けられていますが、非常に便利です) SGI STL の概要 deque
:
Dequeはベクターに非常に似ています。ベクターのように、要素へのランダムアクセス、シーケンスの最後での要素の一定時間の挿入と削除、および中央での要素の線形時間の挿入と削除をサポートするシーケンスです。
Dequeがvectorと異なる主な方法は、dequeがシーケンスの開始時に要素の一定時間の挿入と削除もサポートすることです。さらに、dequeにはvectorのcapacity()およびreserve()に類似したメンバー関数はなく、それらのメンバー関数に関連付けられている反復子の有効性に関する保証も提供しません。
同じサイトの list
の概要は次のとおりです。
リストは二重にリンクされたリストです。つまり、前方または後方の両方のトラバース、および開始または終了、または途中での(償却された)一定時間の挿入と削除をサポートするシーケンスです。リストには、挿入とスプライシングによって要素をリストするイテレータが無効にならず、削除しても削除される要素を指すイテレータのみが無効になるという重要なプロパティがあります。イテレータの順序は変更できます(つまり、list :: iteratorは、リスト操作の前とは異なる先行操作または後続操作を持つ場合があります)が、イテレータ自体は無効化されず、無効化されない限り別の要素を指すようになりませんまたは突然変異は明示的です。
要約すると、コンテナにはルーチンが共有されている可能性がありますが、これらのルーチンの時間保証はコンテナごとに異なります。これは、これらのコンテナのどれをタスクに使用するかを検討する際に非常に重要です:howコンテナが最も頻繁に使用されることを考慮してください(たとえば、挿入/削除よりも検索)を使用すると、適切なコンテナに移動できます。
違いをリストします。
複雑さ
Insert/erase at the beginning in middle at the end
Deque: Amortized constant Linear Amortized constant
List: Constant Constant Constant
std::list
は基本的に二重にリンクされたリストです。
std::deque
は、一方で、std::vector
のように実装されます。インデックスごとの一定のアクセス時間、および開始と終了での挿入と削除があり、リストとは劇的に異なるパフォーマンス特性を提供します。
別の重要な保証は、各コンテナがデータをメモリに保存する方法です。
Dequeはtry toのように設計されていることに注意してください。それぞれの欠点はなく、ベクターとリストの両方の利点をバランスさせます。これは、たとえばマイクロコントローラなど、メモリに制限のあるプラットフォームで特に興味深いコンテナです。
メモリストレージ戦略は見過ごされがちですが、特定のアプリケーションに最適なコンテナを選択することが最も重要な理由の1つであることがよくあります。
いいえ。両端キューは、前面と背面でのO(1)の挿入と削除のみをサポートします。たとえば、ラップアラウンドのベクターで実装できます。 O(1)ランダムアクセスも保証されるため、二重リンクリストを(ちょうど)使用していないことを確認できます。
パフォーマンスの違いは、他の人によって十分に説明されています。オブジェクト指向プログラミングでは、類似または同一のインターフェースが一般的であることを追加したかっただけです。これは、オブジェクト指向ソフトウェアを作成する一般的な方法論の一部です。 2つのクラスが同じインターフェースを実装しているという理由だけで、2つのクラスが同じように機能すると仮定する必要があります。