
コンピュータサイエンスにおいて、コンテナとは、インスタンスが他のオブジェクトの集合であるクラスまたはデータ構造[ 1 ] [ 2 ]のことです。言い換えれば、特定のアクセスルールに従ってオブジェクトを整理された方法で格納します。
コンテナのサイズは、それに含まれるオブジェクト(要素)の数によって決まります。様々なコンテナタイプの基盤となる(継承された)実装は、サイズ、複雑さ、使用言語の種類において異なる場合がありますが、多くの場合、特定のシナリオに適した実装を選択できる柔軟性を提供します。
コンテナデータ構造は、多くの種類のプログラミング言語で一般的に使用されています。
コンテナは、以下の3つの特性によって特徴づけられます。
コンテナクラスは、以下の操作を実行するためにCRUDライクなメソッドを実装することが求められます。
コンテナはイテレータと組み合わせて実装されることがあります。
コンテナは、単一値コンテナまたは連想コンテナに分類できます。
単一値コンテナは、各オブジェクトを独立して格納します。オブジェクトには、直接アクセスすることも、言語のループ構造(例:forループ)を使用するか、イテレータを使用してアクセスできます。
連想コンテナは、キーと値のペアで構成される連想配列、マップ、または辞書を使用します。各キーはコンテナ内で最大1回しか出現しません。キーは、コンテナ内に値(オブジェクト)が格納されている場合に、その値を検索するために使用されます。連想コンテナは、プログラミング言語においてクラステンプレートとして使用されます。
コンテナの抽象データ型には以下が含まれます。
これらの抽象型を実装するために一般的に使用されるデータ構造には、以下のようなものがあります。
ウィジェットツールキットは、ウィンドウやパネルなどの他のウィジェットをグループ化するための特別なウィジェットであるコンテナも使用します。コンテナは、グラフィカルな特性に加えて、子ウィジェットのリストを保持し、子ウィジェットの追加、削除、取得を可能にするなど、コンテナクラスと同様の動作をします。
コンテナの抽象化は、型システムに関係なく、事実上あらゆるプログラミング言語で記述できます。[ 3 ] : 273ただし、厳密な型付けのオブジェクト指向プログラミング言語では、開発者が再利用可能な同質のコンテナを記述するのはやや複雑になる可能性があります。
要素の種類が異なるため、各要素の種類ごとにコンテナのコレクションを作成して保持するという面倒なプロセスが発生する。[ 3 ]: 274-276
多くの基本型(整数や浮動小数点数など)は、占有するメモリサイズと意味論的な意味合いの違いから、本質的に互いに互換性がなく、そのため異なるコンテナを必要とします(もちろん、相互に互換性があるか変換可能な場合は別です)。[ 3 ]: 274-276現代のプログラミング言語は、この問題を解決するためにさまざまなアプローチを提供しています。[ 3 ]: 274-281