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
指针,而不删除指针引用的对象。
注意
在使用数组之前,先使用 SetSize
建立其大小并为其分配内存。 如果不使用 SetSize
,则向数组添加元素会导致它经常重新分配和复制。 经常重新分配和复制会降低效率而且会产生内存碎片。
数组类派生类似于列表派生。 有关特殊用途列表类的派生的详细信息,请参阅文章集合。
注意
如果要序列化数组,则必须在派生类的实现中使用 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();
备注
数组一次增长一个元素。
下表显示了与 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
指针元素。
注解
注意
传递负值或大于 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;
返回值
数组中的项数。
备注
调用此方法可检索数组中的元素数。 因为索引是从零开始的,所以大小比最大索引大 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;
备注
因为索引是从零开始的,所以大小比最大索引大 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;
返回值
上限的索引(从零开始)。
备注
因为数组索引是从零开始的,所以此函数返回一个比 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
的第一个版本在数组中的指定索引处插入一个元素(或元素的多个副本)。 在此过程中,它向上移动(通过递增索引)该索引处的现有元素,并将其上方的所有元素上移。
第二个版本插入另一个 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。
CObArray::operator [ ]
这些下标运算符是 SetAt
和 GetAt
函数的便捷替代项。
CObject*& operator[](int_ptr nindex);
CObject* operator[](int_ptr nindex) const;
注解
第一个运算符,为不是 const
的数组调用,可用于赋值语句的右侧(右值)或左侧(左值)。 第二个运算符,为 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
删除从数组中指定索引处开始的一个或多个元素。
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
类