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 宏。

继承层次结构

CObject

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 指针。 允许值为 NULLnewElement

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 [ ]

这些下标运算符是 SetAtGetAt 函数的便捷替代项。

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 参数会在数组增长时影响内部内存分配。 它的使用绝不会影响 GetSizeGetUpperBound 报告的数组大小。

如果数组的大小已增大,则所有新分配的 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