コレクション クラス
MFC のコレクション クラスでは、オブジェクトのグループを管理できます。 次の 2 種類のコレクション クラスがあります。
C++ テンプレートから作成したコレクション クラス
テンプレートで作成されていないコレクション クラス
注意
非テンプレート コレクション クラスを既に使用しているコードでは、引き続きそのクラスを使用できます。 独自のデータ型のためにタイプ セーフな (型が保証された) コレクション クラスを新規作成する場合は、テンプレート ベースのクラスの使用をお勧めします。
コレクション クラスの形状
コレクション クラスは、その "形状" と要素の型で識別されます。 この "形状" とは、コレクションにオブジェクト編成し、保存する形態のことです。 MFC 3 つの基本的なコレクション図形を提供します。リスト、配列、およびマップ (ディクショナリとも呼ばれます)。 自分のプログラムの内容に最も合ったコレクション形状を選択できます。
コレクション クラスの 3 種類の形状のそれぞれについては、このトピックで簡単に後述します。 機能を比較してプログラムに最も適した形状を決定するには、「コレクション クラスの選択に関する推奨事項」を参照してください。
[リスト]
リスト クラスは、要素を順番に並べたインデックスのないリストであり、双方向のリンク リストとして実装されます。 リストには "先頭" と "末尾" があり、リストの先頭または末尾の要素の追加や削除、または中間の要素の挿入と削除を高速で行うことができます。
配列
配列クラスは、オブジェクトを順番に並べた、整数インデックス付きの配列です。サイズを動的に変更できます。
マップ (ディクショナリとも呼ばれます)
マップは、キー オブジェクトと値オブジェクトを対応付けるコレクションです。
テンプレート ベースのコレクション クラス
任意の型のオブジェクトを含むタイプ セーフなコレクションを実装する最も簡単な方法は、MFC のテンプレート ベースのクラスを使用することです。 テンプレート ベースのクラスの例については、MFC のサンプル プログラム「サンプルを収集します。MFC コレクション クラスを示します」を参照してください。
次の表は、MFC のテンプレート ベースのコレクション クラスの一覧です。
コレクション テンプレート クラス
コレクションの内容 |
配列 |
リスト |
マップ |
---|---|---|---|
任意の型のオブジェクトのコレクション |
CArray |
CList |
CMap |
任意の型のオブジェクトを指すポインターのコレクション |
CTypedPtrArray |
CTypedPtrList |
CTypedPtrMap |
テンプレート ベースでないコレクション クラス
アプリケーションで MFC 非テンプレート クラスを既に使用している場合は、引き続きそのクラスを使用できます。 ただし、新しいコレクションに対しては、テンプレート ベースのクラスを使用することをお勧めします。 次の表は、テンプレート ベースでない MFC のコレクション クラスの一覧です。
非テンプレート コレクション クラス
配列 |
リスト |
マップ |
---|---|---|
CObArray |
CObList |
CMapPtrToWord |
CByteArray |
CPtrList |
CMapPtrToPtr |
CDWordArray |
CStringList |
CMapStringToOb |
CPtrArray |
|
CMapStringToPtr |
CStringArray |
|
CMapStringToString |
CWordArray |
|
CMapWordToOb |
CUIntArray |
|
CMapWordToPtr |
「コレクション クラスの選択に関する推奨事項」の表「MFC コレクション クラスの特徴」では、MFC コレクション クラスについて形状以外の次の特徴が示されています。
クラスで C++ テンプレートを使用しているか
コレクションに格納されている要素をシリアル化できるか
コレクションに格納されている要素を診断用にダンプできるか
タイプ セーフなコレクションか