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 マクロを使用する必要があります。
継承階層
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
この配列に配置するポインター。 値の値newElement
NULL
を指定できます。
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
クラス
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示