CArray クラス
C 言語の配列に似ていますが、必要に応じて動的に配列の縮小や拡張ができます。
template < class TYPE, class ARG_TYPE = const TYPE& >
class CArray :
public CObject
パラメーター
TYPE
配列に格納されるオブジェクトの型を指定するテンプレート パラメーター。 TYPE は、CArray が返すパラメーターです。ARG*_*TYPE
配列に格納されているオブジェクトにアクセスするときに使われる引数の型を指定するテンプレート パラメーター。 通常、TYPE への参照です。 ARG_TYPE は、CArray に渡すパラメーターです。
解説
配列のインデックスは常に 0 から始まります。 インデックスの上限を固定するか、現在の上限を越えて要素を追加したときに配列を拡張できるようにするかを指定できます。 一部の要素が無効 (NULL) の場合でも、メモリは上限まで継続的に割り当てられます。
注意
CArray オブジェクトのサイズを変更するメソッドや、オブジェクトに要素を追加するメソッドは、ほとんどの場合、memcpy_s を使用して要素を移動します。 memcpy_s は、コンストラクターを呼び出す必要のあるオブジェクトと互換性がないため、これは問題になります。 CArray 内の項目が memcpy_s と互換性がない場合は、適切なサイズで新しい CArray を作成する必要があります。 その後、新しい配列にデータを追加するには、CArray::Copy と CArray::SetAt を使用する必要があります。これらのメソッドでは、memcpy_s ではなく代入演算子が使用されます。
C 言語の配列と同じように、CArray の要素にインデックスを使ってアクセスする時間は一定で、配列のサイズとは無関係です。
ヒント
配列を使う場合は、あらかじめ SetSize 関数で配列のサイズを確定し、そのメモリを確保します。 SetSize を使用せずに要素を配列に追加すると、配列が頻繁に再割り当てされ、コピーされます。 頻繁に再割り当てとコピーを行うとパフォーマンスが低下し、メモリ断片化の原因になります。
配列の各要素をダンプする必要があるときは、CDumpContext オブジェクトの深さのパラメーターを 1 以上に設定します。
このクラスの一部のメンバー関数は、グローバルなヘルパー関数を呼び出します。したがって、CArray クラスの主な用途に合わせて、これらのヘルパー関数をカスタマイズする必要があります。 「MFC マクロとグローバル」の「コレクション クラスのヘルパー」を参照してください。
配列クラスの派生は、リストの派生と同様です。
CArray を使用する方法の詳細については、「コレクション」を参照してください。
必要条件
Header: afxtempl.h
参照
処理手順
サンプルを収集します。MFC コレクション クラスを示します