コレクション クラス
更新 : 2007 年 11 月
MFC のコレクション クラスでは、オブジェクトのグループを管理できます。次の 2 種類のコレクション クラスがあります。
C++ テンプレートから作成したコレクション クラス
テンプレートで作成されていないコレクション クラス
ヒント : |
---|
非テンプレート コレクション クラスは、MFC 1.0 から提供されているものです。このクラスを既に使用しているコードでは、そのまま非テンプレート コレクション クラスを使用できます。独自のデータ型のためにタイプ セーフな (型が保証された) コレクション クラスを新規作成する場合は、テンプレート ベースのクラスの使用をお勧めします。 |
コレクション クラスの形状
コレクション クラスは、その "形状" と要素の型で識別されます。この "形状" とは、コレクションにオブジェクト編成し、保存する形態のことです。MFC では、コレクション クラスの基本形状として、リスト、配列、マップの 3 つがあります (マップはディクショナリとも呼ばれます)。自分のプログラムの内容に最も合ったコレクション形状を選択できます。
コレクション クラスの 3 種類の形状のそれぞれについて、簡単に説明します。「コレクション クラスの選択に関する推奨事項」の表「コレクションの形状とその特徴」には各形状の特徴がまとめられており、プログラムに最適な形状を決定する場合の参考になります。
リスト
リスト クラスは、要素を順番に並べたインデックスのないリストであり、双方向のリンク リストとして実装されます。リストには "先頭" と "末尾" があり、リストの先頭または末尾の要素の追加や削除、または中間の要素の挿入と削除を高速で行うことができます。
配列
配列クラスは、オブジェクトを順番に並べた、整数インデックス付きの配列です。サイズを動的に変更できます。
マップ (ディクショナリとも呼ばれます)
マップは、キー オブジェクトと値オブジェクトを対応付けるコレクションです。
テンプレート ベースのコレクション クラス
任意の型のオブジェクトを含むタイプ セーフなコレクションを実装する最も簡単な方法は、MFC のテンプレート ベースのクラスを使用することです。テンプレート ベースのクラスの例については、MFC のサンプル プログラム「COLLECT サンプル : 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++ テンプレートを使用しているか
コレクションに格納されている要素をシリアル化できるか
コレクションに格納されている要素を診断用にダンプできるか
タイプ セーフなコレクションか
目的に合ったトピックをクリックしてください
汎用コレクション クラスの操作方法
テンプレート ベースのコレクション クラスの操作方法
コレクションのメンバへのアクセス (テンプレート ベース/非テンプレート)