コンテナー/アダプターとは何ですか?
誰かが素人の言語で説明してください。
私はインターネットで調べようとしましたが、定義と説明が専門的すぎて理解が困難です。
(クラス/テンプレート/ STL)のようなC++とそのサブトピックの基本的な知識があります。
編集1:
誰かが私にコンテナ/アダプタのアプリケーションの実用的な例を教えてもらえますか?
理解を深めるためだけに:-)
ありがとうございました。
<joke>
C++は技術的で理解しにくい:-D</joke>
コンテナーは、データを含むことができるSTLのデータ型です。
例:動的配列としてのvector
アダプターは、特定のインターフェイスを提供するためにコンテナーを適応させるSTLのデータ型です。
例:stack
選択したコンテナーの上にスタックインターフェイスを提供する
(付記:どちらも実際にはデータ型ではなくテンプレートですが、定義はこの方法でより良く見えます)
コンテナーは、通常は無制限の量のデータを含む特定のデータ構造です。コンテナーの種類ごとに、データに効率的にアクセス、追加、または削除する方法に制限があります。
以下は、STLクラスを使用するコンテナの例です。
以下はシーケンスコンテナーです。つまり、データは確実に順序付けされます(つまり、それらにはフロントとバックがあります。自動的に並べ替えられるわけではありません!)。
これらは関連性のあるコンテナです。つまり、要素は順序付けされなくなり、代わりに、一意性またはマッピングを決定するために使用される互いに関連付けられます。
一方、コンテナアダプタは、既存のコンテナの機能を制限し、異なる機能セットを提供することによって作成されたインターフェースです。コンテナーアダプターを宣言するときに、基になるコンテナーを形成するシーケンスコンテナーを指定するオプションがあります。これらは:
各操作の時間の複雑さや各コンテナータイプの詳細ページへのリンクなど、詳細については このリファレンスページ を参照してください。
SGI STLドキュメント からの「コンテナ」の技術的な定義はかなり良いです:
コンテナは、他のオブジェクト(その要素)を格納するオブジェクトであり、その要素にアクセスするためのメソッドがあります。特に、コンテナのモデルであるすべてのタイプには、コンテナの要素を反復するために使用できるイテレータタイプが関連付けられています。
したがって、コンテナは、あるタイプのオブジェクトのコレクションを保持する(「含む」)データ構造です。重要なアイデアは、さまざまな種類のコンテナがあり、それぞれが異なる方法でオブジェクトを格納し、さまざまなパフォーマンス特性を提供することですが、それらすべてに標準インターフェイスがあり、簡単に、あまり変更せずに1つを別のものと交換できます。コンテナを使用するコードの。考えは、コンテナは可能な限り互換性があるように設計されているということです。
コンテナーアダプターは、コンテナーの機能のサブセットを提供するクラスですが、特定のシナリオでコンテナーを使いやすくする追加機能を提供する場合があります。たとえば、スタックデータ構造にstd::vector
またはstd::deque
を簡単に使用して、スタックインターフェイスとしてPush_back
、back
、およびpop_back
を呼び出すことができます。 std::stack
は、std::vector
またはstd::deque
またはその他のシーケンスコンテナーを使用できるが、より標準的なPush
、top
、およびpop
メンバーにアクセスするためのメンバー関数。