CArray类学习
2007-7-27
CArray类的申明保存在头文件afxtempl.h中。CArray类继承于CObject类。
在使用一个数组前,使用SetSize来建立数组的大小和为它分配内存,如果不使用SetSize,则为数组添加元素就会引起频繁的分配内存和拷贝,容易导致内存碎片。
构造函数:
CArray();
构造一个空数组,数组一次可扩充一个元素。
属性函数:
int GetSize() const;
返回数组的大小,索引是基于0,所以索引的长度比数组大小小1。
int GetUpperBound() const;
返回数组上限,比数组长度小1。
void SetSize(int nNewSize , int nGrowBy = -1);
throw(CMemoryException);
建立一个空的或者已存在数组的大小,如有必要分配内存。如果数组新定义的大小小于原来的大小,则数组内容会被截断,并释放内存。
操作函数:
void FreeExtra();
释放数组扩展时分配的额外的内存空间,但是不影响数组的大小和上界,因为是CArray对象,所以有记录数组大小和上限的成员变量信息,而实际在使用数组时并没有申请那么多的内存空间。
void RemoveAll();
从数组中移除所有的元素,如果数组为空,该函数也起作用。
元素访问函数:
TYPE GetAt(int nIndex) const;
获得nIndex索引位置上的数组元素值,返回为TYPE类型。nIndex在0和数组上限之间的值。
void SetAt(int nIndex , ARG_TYPE newElement);
向nIndex位置设定新的newElement值。该函数不能在数组中添加元素,只能修改。
TYPE& ElementAt(int nIndex);
返回nIndex位置数据元素的参考
const TYPE *GetData() const;
返回指向当前数组元素的指针。使用此函数获得当前数组元素的直接访问能力。如果元素无效则返回null。
增加数组长度函数:
void SetAtGrow(int nIndex , ARG_TYPE newElement);
在nIndex位置设置数组元素newElement。如果必要数组自动增长。
int Add(ARG_TYPE newElement);
在数组的末尾增加一个数组元素,数组长度加1。如果之前使用SetSize是nGrowBy大于1,则内存按照nGrowBy增加。函数返回newElement的数组元素索引。
int Append(const CArray& src);
将同类型的一个数组A附加到本数组的尾部,返回A第一数组元素在本数组的索引。
void Copy(const CArray& src);
将src元素拷贝到本数组对象中。
void InsertAt(int nIndex , ARG_TYPE newElement , int nCount = 1);
throw(CMemoryException);
void InsertAt(int nStartIndex , CArray* pNewArray);
throw(CMemoryException);
在指定的nIndex或者nStartIndex位置插入nCount个newElement数组元素或者pNewArray数组。
void RemoveAt(int nIndex , int nCount = 1);
从指定的nIndex位置开始,删除nCount个数组元素,所有元素下移,并且减少数组的上限,但不释放内存。