CArray クラス
C 言語の配列に似ていますが、必要に応じて動的に配列の縮小や拡張ができます。
template < class TYPE, class ARG_TYPE = const TYPE& >
class CArray :
public CObject
パラメーター
TYPE
配列に格納されるオブジェクトの型を指定するテンプレート パラメーター。TYPE は、CArray が返すパラメーターです。ARG*_*TYPE
配列に格納されているオブジェクトにアクセスするときに使われる引数の型を指定するテンプレート パラメーター。通常、TYPE への参照です。ARG_TYPE は、CArray に渡すパラメーターです。
メンバー
パブリック コンストラクター
名前 |
説明 |
---|---|
空の配列を生成します。 |
パブリック メソッド
名前 |
説明 |
---|---|
配列の最後に要素を追加します。必要に応じて配列を拡張します。 |
|
配列に別の配列を追加します。必要に応じて配列を拡張します。 |
|
配列に別の配列をコピーします。必要に応じて配列を拡張します。 |
|
配列内のポインター要素への一時的な参照を返します。 |
|
現在の上限を超える領域の未使用メモリ全体を解放します。 |
|
指定したインデックス位置にある値を返します。 |
|
配列の要素数を取得します。 |
|
配列内の要素にアクセスできます。NULL の場合もあります。 |
|
配列の要素数を取得します。 |
|
有効なインデックスの最大値を返します。 |
|
配列の指定したインデックス位置に要素 (または別の配列のすべての要素) を挿入します。 |
|
配列が空かどうかを判断します。 |
|
配列のすべての要素を削除します。 |
|
指定したインデックス位置にある要素を削除します。 |
|
指定したインデックス位置に値を設定します。配列の拡張はできません。 |
|
指定したインデックス位置に値を設定します。必要に応じて配列を拡張します。 |
|
配列に格納する要素数を設定します。 |
パブリック演算子
名前 |
説明 |
---|---|
指定したインデックス位置の要素を設定または取得します。 |
解説
配列のインデックスは常に 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 を使用する方法の詳細については、「コレクション」を参照してください。
継承階層
CArray
必要条件
Header: afxtempl.h