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
マクロが組み込まれており、その要素のシリアル化とダンプがサポートされます。 オーバーロードされた挿入演算子またはSerialize
メンバー関数を使用して、CObject
ポインターの配列がアーカイブに格納されている場合、各CObject
要素は、その配列インデックスと共にシリアル化されます。
配列内の個々の CObject
要素のダンプが必要な場合は、 CDumpContext
オブジェクトの深さを 1 以上に設定する必要があります。
CObArray
オブジェクトが削除されたとき、またはその要素が削除されると、参照するオブジェクトではなく、CObject
ポインターのみが削除されます。
Note
配列を使用する前に、SetSize
を使用してそのサイズを設定し、メモリを割り当てます。 SetSize
を使用しない場合、配列に要素を追加すると、配列の再割り当てとコピーが頻繁に発生します。 頻繁な再割り当てとコピーは非効率であり、メモリが断片化される可能性があります。
配列クラスの派生は、リストの派生に似ています。 特殊な目的のリスト クラスの派生の詳細については、 Collectionsに関する記事を参照してください。
Note
配列をシリアル化する場合は、派生クラスの実装で IMPLEMENT_SERIAL マクロを使用する必要があります。
継承階層
CObArray
要件
ヘッダー: afxcoll.h
CObArray::Add
配列の末尾に新しい要素を追加し、配列を 1 ずつ増やします。
INT_PTR Add(CObject* newElement);
パラメーター
newElement
この配列に追加する CObject
ポインター。
戻り値
追加された要素のインデックス。
解説
SetSize
が 1 より大きいnGrowBy
値で使用されている場合は、追加のメモリが割り当てられる可能性があります。 ただし、上限は 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 から始まるため、この関数は GetSize
より 1 未満の値を返します。
条件 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
ポインター。 値NULL
のnewElement
が許可されます。
nCount
この要素を挿入する回数 (既定値は 1)。
nStartIndex
GetUpperBound
によって返される値より大きい可能性がある整数インデックス。
pNewArray
この配列に追加する要素を含む別の配列。
解説
InsertAt
の最初のバージョンでは、配列内の指定したインデックスに 1 つの要素 (または要素の複数のコピー) が挿入されます。 このプロセスでは、このインデックスにある既存の要素を (インデックスをインクリメントして) 上にシフトし、その上にあるすべての要素を上にシフトします。
2 番目のバージョンでは、nStartIndex
位置から始まる別のCObArray
コレクションのすべての要素が挿入されます。
これに対し、 SetAt
関数は、指定された 1 つの配列要素を置き換え、要素をシフトしません。
次の表に、 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 [ ]
これらの添字演算子は、 SetAt
関数と GetAt
関数の代わりに便利です。
CObject*& operator[](int_ptr nindex);
CObject* operator[](int_ptr nindex) const;
解説
const
されていない配列に対して呼び出される最初の演算子は、代入ステートメントの右 (r 値) または左 (l 値) で使用できます。 2 つ目は、 const
配列に対して呼び出され、右側でのみ使用できます。
ライブラリのデバッグ バージョンは、下付き文字 (代入ステートメントの左側または右側) が範囲外の場合にアサートします。
次の表に、 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
クラス