CObArray クラス

CObject ポインターの配列をサポートします。

構文

class CObArray : public CObject

メンバー

パブリック コンストラクター

名前 説明
CObArray::CObArray ポインターの空の配列を CObject 構築します。

パブリック メソッド

名前 説明
CObArray::Add 配列の末尾に要素を追加します。必要に応じて、配列を大きくします。
CObArray::Append 配列に別の配列を追加します。必要に応じて、配列を大きくします。
CObArray::Copy 配列に別の配列をコピーします。必要に応じて、配列を大きくします。
CObArray::ElementAt 配列内の要素ポインターへの一時的な参照を返します。
CObArray::FreeExtra 現在の上限を超えている未使用のメモリをすべて解放します。
CObArray::GetAt 指定されたインデックス位置にある値を返します。
CObArray::GetCount この配列内の要素の数を取得します。
CObArray::GetData 配列内の要素へのアクセスを許可します。 NULL の可能性があります。
CObArray::GetSize この配列内の要素の数を取得します。
CObArray::GetUpperBound 有効な最大のインデックスを返します。
CObArray::InsertAt 指定されたインデックス位置に要素 (または別の配列内のすべての要素) を挿入します。
CObArray::IsEmpty 配列が空かどうかを判別します。
CObArray::RemoveAll この配列からすべての要素を削除します。
CObArray::RemoveAt 特定のインデックス位置にある要素を削除します。
CObArray::SetAt 指定されたインデックスの値を設定します。配列は大きくできません。
CObArray::SetAtGrow 指定されたインデックスの値を設定します。必要に応じて、配列を大きくします。
CObArray::SetSize この配列に含まれる要素の数を設定します。

パブリック演算子

名前 説明
CObArray::operator [] 指定されたインデックス位置にある要素を設定または取得します。

解説

これらのオブジェクト配列は C 配列に似ていますが、必要に応じて動的に縮小および拡張できます。

配列インデックスは常に位置 0 から始まります。 現在の境界を超えて要素を追加するときに、上限を修正するか、配列を展開するかを決定できます。 メモリは、一部の要素 NULLが存在する場合でも、上限に連続して割り当てられます。

Win32 では、オブジェクトのサイズは使用可能な CObArray メモリのみに制限されます。

C 配列と同様に、インデックス付き要素の CObArray アクセス時間は一定であり、配列サイズに依存しません。

CObArray には、IMPLEMENT_SERIAL マクロが組み込まれており、その要素のシリアル化とダンプがサポートされます。 ポインターの CObject 配列が、オーバーロードされた挿入演算子またはメンバー関数を使用 Serialize してアーカイブに格納されている場合、各 CObject 要素は配列インデックスと共にシリアル化されます。

配列内の個々 CObject の要素のダンプが必要な場合は、オブジェクトの CDumpContext 深さを 1 以上に設定する必要があります。

オブジェクトが CObArray 削除されたとき、またはその要素が削除されると、ポインターのみが CObject 削除され、参照するオブジェクトは削除されません。

Note

配列を使用する前に、SetSize を使用してそのサイズを設定し、メモリを割り当てます。 SetSize を使用しない場合、配列に要素を追加すると、配列の再割り当てとコピーが頻繁に発生します。 頻繁な再割り当てとコピーは非効率であり、メモリが断片化される可能性があります。

配列クラスの派生は、リストの派生に似ています。 特殊な目的のリスト クラスの派生の詳細については、コレクションに関する記事を参照してください。

Note

配列をシリアル化する場合は、派生クラスの実装で IMPLEMENT_Standard Edition RIAL マクロを使用する必要があります。

継承階層

CObject

CObArray

必要条件

ヘッダー:afxcoll.h

CObArray::Add

配列の末尾に新しい要素を追加し、配列を 1 ずつ増やします。

INT_PTR Add(CObject* newElement);

パラメーター

newElement
CObjectこの配列に追加するポインター。

戻り値

追加された要素のインデックス。

解説

1 より大きい値でnGrowBy使用されている場合SetSizeは、追加のメモリが割り当てられる可能性があります。 ただし、上限は 1 だけ増加します。

次の表に、次のような他のメンバー関数を CObArray::Add示します。

クラス メンバー関数
CByteArray INT_PTR Add(BYTE newElement);

throw(CMemoryException*);
CDWordArray INT_PTR Add(DWORD newElement);

throw(CMemoryException*);
CPtrArray INT_PTR Add(void* newElement);

throw(CMemoryException*);
CStringArray INT_PTR Add(LPCTSTR newElement); throw(CMemoryException*);

INT_PTR Add(const CString& newElement);
CUIntArray INT_PTR Add(UINT newElement);

throw(CMemoryException*);
CWordArray INT_PTR Add(WORD newElement);

throw(CMemoryException*);

すべてのコレクション例で使用されるCAgeクラスの一覧を参照してくださいCObList::CObList

CObArray arr;

arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
#ifdef _DEBUG
   afxDump.SetDepth(1);
   afxDump << _T("Add example: ") << &arr << _T("\n");
#endif      

このプログラムの結果は次のとおりです。

Add example: A CObArray with 2 elements
[0] = a CAge at $442A 21
[1] = a CAge at $4468 40

CObArray::Append

このメンバー関数を呼び出して、指定された配列の末尾に別の配列の内容を追加します。

INT_PTR Append(const CObArray& src);

パラメーター

src
配列に追加する要素のソース。

戻り値

最初に追加された要素のインデックス。

解説

配列は同じ型である必要があります。

必要に応じて、 Append 配列に追加された要素を格納するために追加のメモリを割り当てることができます。

次の表に、次のような他のメンバー関数を CObArray::Append示します。

クラス メンバー関数
CByteArray INT_PTR Append(const CByteArray& src);
CDWordArray INT_PTR Append(const CDWordArray& src);
CPtrArray INT_PTR Append(const CPtrArray& src);
CStringArray INT_PTR Append(const CStringArray& src);
CUIntArray INT_PTR Append(const CUIntArray& src);
CWordArray INT_PTR Append(const CWordArray& src);

すべてのコレクション例で使用されるCAgeクラスの一覧を参照してくださいCObList::CObList

CObArray myArray1, myArray2;

// Add elements to the second array.
myArray2.Add(new CAge(21));
myArray2.Add(new CAge(42));

// Add elements to the first array and also append the second array.
myArray1.Add(new CAge(3));
myArray1.Append(myArray2);

#ifdef _DEBUG
   afxDump.SetDepth(1);
   afxDump << _T("myArray1: ") << &myArray1 << _T("\n");
   afxDump << _T("myArray2: ") << &myArray2 << _T("\n");
#endif      

CObArray::Copy

このメンバー関数を呼び出して、指定された配列の要素を同じ型の別の配列の要素で上書きします。

void Copy(const CObArray& src);

パラメーター

src
配列にコピーする要素のソース。

解説

Copy はメモリを解放しません。 必要に応じて、 Copy 配列にコピーされた要素を格納するために追加のメモリを割り当てることができます。

次の表に、次のような他のメンバー関数を CObArray::Copy示します。

クラス メンバー関数
CByteArray void Copy(const CByteArray& src);
CDWordArray void Copy(const CDWordArray& src);
CPtrArray void Copy(const CPtrArray& src);
CStringArray void Copy(const CStringArray& src);
CUIntArray void Copy(const CUIntArray& src);
CWordArray void Copy(const CWordArray& src);

すべてのコレクション例で使用されるCAgeクラスの一覧を参照してくださいCObList::CObList

CObArray myArray1, myArray2;

// Add elements to the second array.
myArray2.Add(new CAge(21));
myArray2.Add(new CAge(42));

// Copy the elements from the second array to the first.
myArray1.Copy(myArray2);

#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << "myArray1: " << &myArray1 << "\n";
afxDump << "myArray2: " << &myArray2 << "\n";
#endif      

CObArray::CObArray

CObject のポインター配列を構築します。

CObArray();

解説

配列は一度に 1 つの要素を拡大します。

次の表に、次のような他のコンストラクターを CObArray::CObArray示します。

クラス コンストラクター
CByteArray CByteArray();
CDWordArray CDWordArray();
CPtrArray CPtrArray();
CStringArray CStringArray();
CUIntArray CUIntArray();
CWordArray CWordArray();

CObArray arr; //Array with default blocksize
CObArray* pArray = new CObArray; //Array on the heap with default blocksize      

CObArray::ElementAt

配列内の要素ポインターへの一時的な参照を返します。

CObject*& ElementAt(INT_PTR nIndex);

パラメーター

nIndex
0 以上で、返される GetUpperBound値以下の整数インデックス。

戻り値

ポインターへの CObject 参照。

解説

配列の左側の代入演算子を実装するために使用されます。 これは、特殊な配列演算子を実装するためだけに使用する必要がある高度な関数です。

次の表に、次のような他のメンバー関数を CObArray::ElementAt示します。

クラス メンバー関数
CByteArray BYTE& ElementAt(INT_PTR nIndex);
CDWordArray DWORD& ElementAt(INT_PTR nIndex);
CPtrArray void*& ElementAt(INT_PTR nIndex);
CStringArray CString& ElementAt(INT_PTR nIndex);
CUIntArray UINT& ElementAt(INT_PTR nIndex);
CWordArray WORD& ElementAt(INT_PTR nIndex);

CObArray::GetSize の例を参照してください。

CObArray::FreeExtra

配列の拡大中に割り当てられた追加のメモリを解放します。

void FreeExtra();

解説

この関数は、配列のサイズまたは上限には影響しません。

次の表に、次のような他のメンバー関数を CObArray::FreeExtra示します。

クラス メンバー関数
CByteArray void FreeExtra();
CDWordArray void FreeExtra();
CPtrArray void FreeExtra();
CStringArray void FreeExtra();
CUIntArray void FreeExtra();
CWordArray void FreeExtra();

CObArray::GetData の例を参照してください。

CObArray::GetAt

指定したインデックス位置にある配列要素を返します。

CObject* GetAt(INT_PTR nIndex) const;

パラメーター

nIndex
0 以上で、返される GetUpperBound値以下の整数インデックス。

戻り値

現在この CObject インデックスにあるポインター要素。

解説

Note

負の値または返される GetUpperBound 値より大きい値を渡すと、アサーションが失敗します。

次の表に、次のような他のメンバー関数を CObArray::GetAt示します。

クラス メンバー関数
CByteArray BYTE GetAt(INT_PTR nIndex) const;
CDWordArray DWORD GetAt(INT_PTR nIndex) const;
CPtrArray void* GetAt(INT_PTR nIndex) const;
CStringArray const CString& GetAt(INT_PTR nIndex) const;
CUIntArray UINT GetAt(INT_PTR nIndex) const;
CWordArray WORD GetAt(INT_PTR nIndex) const;

すべてのコレクション例で使用されるCAgeクラスの一覧を参照してくださいCObList::CObList

CObArray arr;

arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
ASSERT(*(CAge*) arr.GetAt(0) == CAge(21));      

CObArray::GetCount

配列要素の数を返します。

INT_PTR GetCount() const;

戻り値

配列内の項目の数。

解説

配列内の要素の数を取得するには、このメソッドを呼び出します。 インデックスは 0 から始まるため、サイズは最大インデックスより 1 大きくなります。

次の表に、次のような他のメンバー関数を CObArray::GetCount示します。

クラス メンバー関数
CByteArray INT_PTR GetCount() const;
CDWordArray INT_PTR GetCount() const;
CPtrArray INT_PTR GetCount() const;
CStringArray INT_PTR GetCount() const;
CUIntArray INT_PTR GetCount() const;
CWordArray INT_PTR GetCount() const;

すべてのコレクション例で使用されるCAgeクラスの一覧を参照してくださいCObList::CObList

CObArray myArray;

// Add elements to the array.
for (int i = 0; i < 10; i++)
   myArray.Add(new CAge(i));

// Add 100 to all the elements of the array.
for (int i = 0; i < myArray.GetCount(); i++)
{
   CAge*& pAge = (CAge*&) myArray.ElementAt(i);
   delete pAge;
   pAge = new CAge(100 + i);
}

CObArray::GetData

配列内の要素に直接アクセスするには、このメンバー関数を使用します。

const CObject** GetData() const;

CObject** GetData();

戻り値

ポインターの CObject 配列へのポインター。

解説

使用できる要素がない場合は、 GetData 値を NULL 返します。

配列の要素への直接アクセスは、より迅速に作業するのに役立ちますが、呼び出すとき GetDataは注意が必要です。エラーが発生した場合は、配列の要素に直接影響します。

次の表に、次のような他のメンバー関数を CObArray::GetData示します。

クラス メンバー関数
CByteArray const BYTE* GetData() const; BYTE* GetData();
CDWordArray const DWORD* GetData() const; DWORD* GetData();
CPtrArray const void** GetData() const; void** GetData();
CStringArray const CString* GetData() const; CString* GetData();
CUIntArray const UINT* GetData() const; UINT* GetData();
CWordArray const WORD* GetData() const; WORD* GetData();

すべてのコレクション例で使用されるCAgeクラスの一覧を参照してくださいCObList::CObList

CObArray myArray;

// Allocate memory for at least 32 elements.
myArray.SetSize(32, 128);

// Add elements to the array.
CAge** ppAge = (CAge * *)myArray.GetData();
for (int i = 0; i < 32; i++, ppAge++)
   * ppAge = new CAge(i);

// Only keep first 5 elements and free extra (unused) bytes.
for (int i = 5; i < myArray.GetCount(); i++)
{
   delete myArray[i]; // free objects before resetting array size.         
}
myArray.SetSize(5, 128);
myArray.FreeExtra(); // only frees pointers.

#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("myArray: ") << &myArray << _T("\n");
#endif      

CObArray::GetSize

配列のサイズを返します。

INT_PTR GetSize() const;

解説

インデックスは 0 から始まるため、サイズは最大インデックスより 1 大きくなります。

次の表に、次のような他のメンバー関数を CObArray::GetSize示します。

クラス メンバー関数
CByteArray INT_PTR GetSize() const;
CDWordArray INT_PTR GetSize() const;
CPtrArray INT_PTR GetSize() const;
CStringArray INT_PTR GetSize() const;
CUIntArray INT_PTR GetSize() const;
CWordArray INT_PTR GetSize() const;

すべてのコレクション例で使用されるCAgeクラスの一覧を参照してくださいCObList::CObList

CObArray myArray;

// Add elements to the array.
for (int i = 0; i < 10; i++)
   myArray.Add(new CAge(i));

// Add 100 to all the elements of the array.
for (int i = 0; i < myArray.GetSize(); i++)
{
   CAge*& pAge = (CAge * &)myArray.ElementAt(i);
   delete pAge;
   pAge = new CAge(100 + i);
}

#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("myArray: ") << &myArray << _T("\n");
#endif      

CObArray::GetUpperBound

この配列の現在の上限を返します。

INT_PTR GetUpperBound() const;

戻り値

上限のインデックス (0 から始まる)。

解説

配列インデックスは 0 から始まるため、この関数は 1 未満 GetSizeの値を返します。

この条件 GetUpperBound() = -1 は、配列に要素が含まれていることを示します。

次の表に、次のような他のメンバー関数を CObArray::GetUpperBound示します。

クラス メンバー関数
CByteArray INT_PTR GetUpperBound() const;
CDWordArray INT_PTR GetUpperBound() const;
CPtrArray INT_PTR GetUpperBound() const;
CStringArray INT_PTR GetUpperBound() const;
CUIntArray INT_PTR GetUpperBound() const;
CWordArray INT_PTR GetUpperBound() const;

すべてのコレクション例で使用されるCAgeクラスの一覧を参照してくださいCObList::CObList

CObArray arr;

arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
ASSERT(arr.GetUpperBound() == 1); // Largest index      

CObArray::InsertAt

指定されたインデックス位置に要素 (または別の配列内のすべての要素) を挿入します。

void InsertAt(
    INT_PTR nIndex,
    CObject* newElement,
    INT_PTR nCount = 1);

void InsertAt(
    INT_PTR nStartIndex,
    CObArray* pNewArray);

パラメーター

nIndex
によって返される GetUpperBound値より大きい可能性がある整数インデックス。

newElement
CObjectこの配列に配置するポインター。 値の値newElementNULLを指定できます。

nCount
この要素を挿入する回数 (既定値は 1)。

nStartIndex
によって返される GetUpperBound値より大きい可能性がある整数インデックス。

pNewArray
この配列に追加する要素を含む別の配列。

解説

最初のバージョンでは、配列内の InsertAt 指定したインデックスに 1 つの要素 (または要素の複数のコピー) を挿入します。 このプロセスでは、このインデックスにある既存の要素を (インデックスをインクリメントして) 上にシフトし、その上にあるすべての要素を上にシフトします。

2 番目のバージョンでは、位置から始まる別 CObArray のコレクションのすべての要素が nStartIndex 挿入されます。

これに対し、関数は SetAt 指定された配列要素を置き換え、要素をシフトしません。

次の表に、次のような他のメンバー関数を CObArray::InsertAt示します。

クラス メンバー関数
CByteArray void InsertAt(INT_PTR nIndex, BYTE newElement, int nCount = 1);

throw(CMemoryException*);

void InsertAt(INT_PTR nStartIndex, CByteArray* pNewArray);

throw(CMemoryException*);
CDWordArray void InsertAt(INT_PTR nIndex, DWORD newElement, int nCount = 1);

throw(CMemoryException*);

void InsertAt(INT_PTR nStartIndex, CDWordArray* pNewArray);

throw(CMemoryException*);
CPtrArray void InsertAt(INT_PTR nIndex, void* newElement, int nCount = 1);

throw(CMemoryException*);

void InsertAt(INT_PTR nStartIndex, CPtrArray* pNewArray);

throw(CMemoryException*);
CStringArray void InsertAt(INT_PTR nIndex, LPCTSTR newElement, int nCount = 1);

throw(CMemoryException*);

void InsertAt(INT_PTR nStartIndex, CStringArray* pNewArray);

throw(CMemoryException*);
CUIntArray void InsertAt(INT_PTR nIndex, UINT newElement, int nCount = 1);

throw(CMemoryException*);

void InsertAt(INT_PTR nStartIndex, CUIntArray* pNewArray);

throw(CMemoryException*);
CWordArray void InsertAt(INT_PTR nIndex, WORD newElement, int nCount = 1);

throw(CMemoryException*);

void InsertAt(INT_PTR nStartIndex, CWordArray* pNewArray);

throw(CMemoryException*);

すべてのコレクション例で使用されるCAgeクラスの一覧を参照してくださいCObList::CObList

CObArray arr;

arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1 (will become 2).
arr.InsertAt(1, new CAge(30));  // New element 1
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("InsertAt example: ") << &arr << _T("\n");
#endif      

このプログラムの結果は次のとおりです。

InsertAt example: A CObArray with 3 elements
[0] = a CAge at $45C8 21
[1] = a CAge at $4646 30
[2] = a CAge at $4606 40

CObArray::IsEmpty

配列が空かどうかを判別します。

BOOL IsEmpty() const;

戻り値

配列が空の場合は 0 以外。それ以外の場合は 0。

CObArray::operator [ ]

これらの添字演算子は、関数のGetAt代わりにSetAt便利です。

CObject*& operator[](int_ptr nindex);
CObject* operator[](int_ptr nindex) const;

解説

そうでない const配列に対して呼び出される最初の演算子は、代入ステートメントの右 (r 値) または左 (l 値) で使用できます。 配列に対して const 呼び出される 2 つ目は、右側でのみ使用できます。

ライブラリのデバッグ バージョンは、下付き文字 (代入ステートメントの左側または右側) が範囲外の場合にアサートします。

次の表に、次のような他の演算子を CObArray::operator []示します。

クラス 演算子
CByteArray BYTE& operator [](INT_PTR nindex);

BYTE operator [](INT_PTR nindex) const;
CDWordArray DWORD& operator [](INT_PTR nindex);

DWORD operator [](INT_PTR nindex) const;
CPtrArray void*& operator [](INT_PTR nindex);

void* operator [](INT_PTR nindex) const;
CStringArray CString& operator [](INT_PTR nindex);

CString operator [](INT_PTR nindex) const;
CUIntArray UINT& operator [](INT_PTR nindex);

UINT operator [](INT_PTR nindex) const;
CWordArray WORD& operator [](INT_PTR nindex);

WORD operator [](INT_PTR nindex) const;

すべてのコレクション例で使用されるCAgeクラスの一覧を参照してくださいCObList::CObList

CObArray arr;
CAge* pa;

arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
pa = (CAge*)arr[0]; // Get element 0
ASSERT(*pa == CAge(21)); // Get element 0
arr[0] = new CAge(30); // Replace element 0
delete pa;
ASSERT(*(CAge*)arr[0] == CAge(30)); // Get new element 0      

CObArray::RemoveAll

この配列からすべてのポインターを削除しますが、実際にはオブジェクトを CObject 削除しません。

void RemoveAll();

解説

配列が既に空の場合、関数は引き続き機能します。

この関数は RemoveAll 、ポインター ストレージに使用されるすべてのメモリを解放します。

次の表に、次のような他のメンバー関数を CObArray::RemoveAll示します。

クラス メンバー関数
CByteArray void RemoveAll();
CDWordArray void RemoveAll();
CPtrArray void RemoveAll();
CStringArray void RemoveAll();
CUIntArray void RemoveAll();
CWordArray void RemoveAll();

すべてのコレクション例で使用されるCAgeクラスの一覧を参照してくださいCObList::CObList

CObArray arr;
CAge* pa1;
CAge* pa2;

arr.Add(pa1 = new CAge(21)); // Element 0
arr.Add(pa2 = new CAge(40)); // Element 1
ASSERT(arr.GetSize() == 2);
arr.RemoveAll(); // Pointers removed but objects not deleted.
ASSERT(arr.GetSize() == 0);
delete pa1;
delete pa2;  // Cleans up memory.      

CObArray::RemoveAt

配列内の指定したインデックスから始まる 1 つ以上の要素を削除します。

void RemoveAt(
    INT_PTR nIndex,
    INT_PTR nCount = 1);

パラメーター

nIndex
0 以上で、返される GetUpperBound値以下の整数インデックス。

nCount
削除する要素の数を指定します。

解説

このプロセスでは、削除された要素の上にあるすべての要素を下にシフトします。 配列の上限はデクリメントされますが、メモリは解放されません。

削除ポイントの上にある配列に含まれている要素よりも多くの要素を削除しようとすると、ライブラリのデバッグ バージョンがアサートされます。

この関数は RemoveAt 配列からポインターを削除 CObject しますが、オブジェクト自体は削除しません。

次の表に、次のような他のメンバー関数を CObArray::RemoveAt示します。

クラス メンバー関数
CByteArray void RemoveAt(INT_PTR nIndex, INT_PTR nCount = 1);
CDWordArray void RemoveAt(INT_PTR nIndex, INT_PTR nCount = 1);
CPtrArray void RemoveAt(INT_PTR nIndex, INT_PTR nCount = 1);
CStringArray void RemoveAt(INT_PTR nIndex, INT_PTR nCount = 1);
CUIntArray void RemoveAt(INT_PTR nIndex, INT_PTR nCount = 1);
CWordArray void RemoveAt(INT_PTR nIndex, INT_PTR nCount = 1);

すべてのコレクション例で使用されるCAgeクラスの一覧を参照してくださいCObList::CObList

CObArray arr;
CObject* pa;

arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
if ((pa = arr.GetAt(0)) != NULL)
{
   arr.RemoveAt(0);  // Element 1 moves to 0.
   delete pa; // Delete the original element at 0.
}
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("RemoveAt example: ") << &arr << _T("\n");
#endif      

このプログラムの結果は次のとおりです。

RemoveAt example: A CObArray with 1 elements
[0] = a CAge at $4606 40

CObArray::SetAt

指定したインデックス位置に配列要素を設定します。

void SetAt(
    INT_PTR nIndex,
    CObject* newElement);

パラメーター

nIndex
0 以上で、返される GetUpperBound値以下の整数インデックス。

newElement
この配列に挿入するオブジェクト ポインター。 値を NULL 指定できます。

解説

SetAt では、配列が拡大することはありません。 配列を自動的に拡大する場合に使用 SetAtGrow します。

インデックス値が配列内の有効な位置を表していることを確認します。 範囲外の場合は、ライブラリのデバッグ バージョンがアサートされます。

次の表に、次のような他のメンバー関数を CObArray::SetAt示します。

クラス メンバー関数
CByteArray void SetAt(INT_PTR nIndex, BYTE newElement);
CDWordArray void SetAt(INT_PTR nIndex, DWORD newElement);
CPtrArray void SetAt(INT_PTR nIndex, void* newElement);
CStringArray void SetAt(INT_PTR nIndex, LPCTSTR newElement);
CUIntArray void SetAt(INT_PTR nIndex, UINT newElement);
CWordArray void SetAt(INT_PTR nIndex, WORD newElement);

すべてのコレクション例で使用されるCAgeクラスの一覧を参照してくださいCObList::CObList

CObArray arr;
CObject* pa;

arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
if ((pa = arr.GetAt(0)) != NULL)
{
   arr.SetAt(0, new CAge(30));  // Replace element 0.
   delete pa; // Delete the original element at 0.
}
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("SetAt example: ") << &arr << _T("\n");
#endif      

このプログラムの結果は次のとおりです。

SetAt example: A CObArray with 2 elements
[0] = a CAge at $47E0 30
[1] = a CAge at $47A0 40

CObArray::SetAtGrow

指定したインデックス位置に配列要素を設定します。

void SetAtGrow(
    INT_PTR nIndex,
    CObject* newElement);

パラメーター

nIndex
0 以上の整数インデックス。

newElement
この配列に追加するオブジェクト ポインター。 値を NULL 指定できます。

解説

必要に応じて配列が自動的に拡張されます (つまり、新しい要素に合わせて上限が調整されます)。

次の表に、次のような他のメンバー関数を CObArray::SetAtGrow示します。

クラス メンバー関数
CByteArray void SetAtGrow(INT_PTR nIndex, BYTE newElement);

throw(CMemoryException*);
CDWordArray void SetAtGrow(INT_PTR nIndex, DWORD newElement);

throw(CMemoryException*);
CPtrArray void SetAtGrow(INT_PTR nIndex, void* newElement);

throw( CMemoryException*);
CStringArray void SetAtGrow(INT_PTR nIndex, LPCTSTR newElement);

throw(CMemoryException*);
CUIntArray void SetAtGrow(INT_PTR nIndex, UINT newElement);

throw(CMemoryException*);
CWordArray void SetAtGrow(INT_PTR nIndex, WORD newElement);

throw(CMemoryException*);

すべてのコレクション例で使用されるCAgeクラスの一覧を参照してくださいCObList::CObList

CObArray arr;

arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
arr.SetAtGrow(3, new CAge(65)); // Element 2 deliberately
                                      // skipped.
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("SetAtGrow example: ") << &arr << _T("\n");
#endif      

このプログラムの結果は次のとおりです。

SetAtGrow example: A CObArray with 4 elements
[0] = a CAge at $47C0 21
[1] = a CAge at $4800 40
[2] = NULL
[3] = a CAge at $4840 65

CObArray::SetSize

空または既存の配列のサイズを確立します。は、必要に応じてメモリを割り当てます。

void SetSize(
    INT_PTR nNewSize,
    INT_PTR nGrowBy = -1);

パラメーター

nNewSize
新しい配列サイズ (要素の数)。 0 以上である必要があります。

nGrowBy
サイズの増加が必要な場合に割り当てる要素スロットの最小数。

解説

新しいサイズが古いサイズより小さい場合、配列は切り捨てられ、未使用のすべてのメモリが解放されます。 効率を高めるために、配列を使用する前に配列のサイズを設定する呼び出し SetSize を行います。 これにより、項目が追加されるたびに配列を再割り当てしてコピーする必要がなくなります。

このパラメーターは nGrowBy 、配列の拡大中に内部メモリの割り当てに影響します。 その使用は、報告されたGetSize配列のサイズに影響を与えることはありません。GetUpperBound

配列のサイズが大きくなった場合は、新しく割り当てられた CObject * ポインター NULLがすべて .

次の表に、次のような他のメンバー関数を CObArray::SetSize示します。

クラス メンバー関数
CByteArray void SetSize(INT_PTR nNewSize, int nGrowBy = -1);

throw(CMemoryException*);
CDWordArray void SetSize(INT_PTR nNewSize, int nGrowBy = -1);

throw(CMemoryException*);
CPtrArray void SetSize(INT_PTR nNewSize, int nGrowBy = -1);

throw(CMemoryException*);
CStringArray void SetSize(INT_PTR nNewSize, int nGrowBy = -1);

throw(CMemoryException*);
CUIntArray void SetSize(INT_PTR nNewSize, int nGrowBy = -1);

throw(CMemoryException*);
CWordArray void SetSize(INT_PTR nNewSize, int nGrowBy = -1);

throw(CMemoryException*);

CObArray::GetData の例を参照してください。

関連項目

CObject クラス
階層図
CStringArray クラス
CPtrArray クラス
CByteArray クラス
CWordArray クラス
CDWordArray クラス