1.CStringArray类
CStringArray类可以用来存储CString类型的对象,而且它的容量是可以动态增加的。
CStringArray
CObject |
└CStringArray |
CStringArray类支持CString对象数组。
CStringArray的成员函数类似于CObArray类的成员函数。由于具有这些相似性,你可以参考关于CObArray的参考文件来获取CStringArray成员函数的详细说明。如果在说明中看到某一函数的返回值是一个指向CObject对象的指针,则可以用一个CString(而不是一个CString指针)来代替它。如果看到某一函数的参数是一个指向CObject的指针,则可以用LPCTSTR来代替它。
例如,可以将
CObject* CObArray::GetAt( int <nIndex> ) const;
转换为
CString CStringArray::GetAt( int <nIndex> ) const;
和将
void SetAt( int <nIndex>, CObject* <newElement> )
转换为
void SetAt( int <nIndex>, LPCTSTR <newElement> );
CStringArray与IMPLEMENT_SERIAL宏联合起来支持其元素的连续和转储。如果一个CString对象数组被用一个重载的插入操作符或Serialize成员函数保存到一个存档中,则它的每一个元素都按顺序连续。
注意:
在使用一个数组之前,使用SetSize来建立它的大小并给它分配内存。如果你不使用SetSize,则向数组中添加元素将导致数组被频繁地拷贝和分配内存。频繁分配内存和拷贝会导致效率低和内存零碎。
如果你需要数组中个别字符串元素的转储,则应该将转储环境的深度设置为1或更大。当一个CString数组被删除时,或当其中的个别元素被删除时,字符串内存被根据需要释放。
有关使用CStringArray的更多信息,参见“Visual C++程序员指南”中的文章“集合”。
#include <afxcoll.h>
CStringArray类成员
构造
CStringArray | 构造一个空的CString对象数组 |
绑定
GetSize | 获取这个数组中的元素数目 |
SetSize | 设置这个数组中包含的元素数目 |
GetUpperBound | 返回最大的有效索引 |
操作符
FreeExtra | 释放当前数组边界之外的未使用的所有内存 |
RemoveAll | 从数组中删除所有元素 |
元素访问
GetAt | 返回位于给定索引处的值 |
SetAt | 设置给定索引处的元素的值;不得将数组增大 |
ElementAt | 返回对数组中的某一元素指针的临时引用 |
GetData | 对数组中的元素允许的访问。可以是NULL |
扩大数组
SetAtGrow | 设置给定索引处的值,如果必要的话可以增长数组 |
Add | 在数组的末尾添加一个元素;可根据需要增长数组 |
Append | 向数组中添加另一个数组;如果必要的话可增长数组 |
Copy | 将另一个数组拷贝到此数组中;如果必要的话可增长数组 |
插入/删除
InsertAt | 在指定索引处插入一个元素(或者是另一个数组中的所有元素) |
RemoveAt | 删除指定索引处的一个元素 |
操作符
operator [] | 设置或获取在指定索引处的元素 |
2.CPtrArray类
CPtrArray类支持void类型的指针数组,该类的成员函数与CObArray类相应的函数类似,只是CObArray类的成员函数中使用CObject指针作为参数或返回值类型的地方,在CPtrArray类中都用void类型的指针代替
CPtrArray
CObject |
└CPtrArray |
CPtrArray的成员函数类似于CObArray类的成员函数。由于这种相似,你可以利用CObArray参考文档作为成员函数的说明。无论在何处使用一个CObject指针作为函数参数或返回值,都可以将它替换成void。例如:
CObject* CObArray::GetAt( int <nIndex> ) const;
可以转换成:
void* CPtrArray::GetAt( int <nIndex> ) const;
CPtrArray嵌入IMPLEMENT_DYNAMIC宏来支持运行时类型访问和转储到一个CDumpContext对象。如果你需要转储个别的指针数组元素,你必须将转储环境的深度设置为1或更大。
注意:
在使用一个数组之前,先用SetSize函数建立数组的大小,并为数组分配内存。如果应用程序没有使用SetSize函数,则向数组中增加元素会使它被频繁地再分配和拷贝。频繁再分配和拷贝的效率很低,并且可能使内存变得很零碎。
指针数组不能被串行化。
当一个指针数组被删除时,或当其元素被删掉时,只删掉指针,而这些指针所引用的实体不被删除。
#include <afxcoll.h>
请参阅:CObArray
CPtrArray类成员
构造
CPtrArray | 构造一个空的void指针数组 |
绑定
GetSize | 获取这个数组中的元素个数 |
GetUpperBound | 返回最大的有效索引 |
SetSize | 设置此数组中要包含的元素个数 |
操作
FreeExtra | 释放超出当前上界的所有未用内存 |
RemoveAll | 删除此数组中的所有元素 |
元素访问
GetAt | 返回给定索引处的值 |
SetAt | 设置给定索引处的值;数组不运行扩展 |
ElementAt | 返回对数组内的一个元素指针的一个临时引用 |
GetData | 允许访问数组中的元素。不能是NULL |
扩大数组
SetAtGrow | 设置给定索引处的值,如果必要,允许数组扩展 |
Add | 将一个元素增加到数组尾;在必要时扩展数组 |
Append | 将另一个数组添加到此数组;如果必要,则扩展此数组 |
Copy | 将另一个数组拷贝给此数组;如果必要,则扩展此数组 |
插入/删除
InsertAt | 将一个元素(或另一数组中的所有元素)插入到指定索引处 |
RemoveAt | 删除指定索引处的元素 |
操作符
operator [] | 设置或获取给定索引处的元素 |