动态数组是Symbian OS中最常用的集合类,数组的元素可以是任意类型,但在应用中最为常见的元素类型为:
1、指向继承CBase的C-类型对象指针。
2、T-类型对象和R-类型对象。
Symbian OS中的动态数组都为模板类,模板参数定义了数组的元素类型。根据实际需要,数组类型可以选择支持固定长度对象或可变长度对象。
RArray和RPointerArray是最常用的集合类。RArray是固定长度对象的简单数组,模板参数应该是简单类型、T-类型或R-类型;而RPointerArray是对象指针数组,模板参数可以是任意类型。一般倾向于在栈上构造,或作为基于堆对象的数据成员。
RArray(RPointerArray)
创建数组
作为简单数组,数组元素类型必须为T-或R-类型。
inline RArray();
Example:RArray Array;
默认构造函数使用默认的粒度(8)和偏移量(0)实例化数组。其中粒度为重新分配存储空间时,扩充的最大元素数。
inline RArray(TInt aGranularity);
Example:RArray Array(4);
通过默认偏移量和指定粒度创建数组。
inline RArray(TInt aGranularity, TInt aKeyOffset);
Example:RArray Array(4,1);
通过指定粒度和偏移量创建数组。
释放数组
为确保在关闭数组前没有内存泄漏,需要释放分配给该数组的所以内存。
inline void Close();
关闭数组并释放分配给数组的所有内存。
inline TInt Count() const;
关闭数组并释放分配给数组的所有内存,并返回数组中的元素数。
引用数组元素
inline const T &operator[](TInt anIndex) const;
inline T &operator[](TInt anIndex);
通过operator[]访问元素提供了两个重载函数,一个返回const类型引用,一个返回非const类型的引用。
添加、插入、删除元素
inline TInt Append(const T &anEntry);
在数组末尾添加新元素。
inline TInt Insert(const T &anEntry, TInt aPos);
在数组的指定位置插入新元素。
inline void Remove(TInt anIndex);
在数组的指定位置删除元素。
元素排序
inline void Sort(TLinearOrder< T > anOrder);
排序的一般方法为:
1、确定以元素对象的哪个属性值进行排序。定义一个比较函数比较元素的属性值,如果对象的值相等,函数返回0;如果第一个值小,函数返回-1;如果第二个值小,函数返回+1。可以将该比较函数实现为静态成员函数、全局函数或命名空间的成员,比较函数的两个参数类型必须为const引用类型。
2、用比较函数指针构造一个TLinearOrder对象。
3、在数组上调用Sort(),同时传递TLinearOrder对象。
查找元素
inline TInt Find(const T &anEntry, TIdentityRelation< T > anIdentity) const;
在数组上使用指定匹配法则顺序查找与指定对象相等的数组元素,并返回元素索引值。匹配法则提供了一个函数来确定了两个对象是否匹配。查找顺序从低位数组索引值开始,并不保证数组元素是顺序排列。
查找的一般方法为:
1、确定以元素对象的哪个属性值进行查找。定义一个比较函数比较元素的属性值,如果对象的值相等,函数返回ETrue;否则返回EFalse。可以将该比较函数实现为静态成员函数、全局函数或命名空间的成员,比较函数的两个参数类型必须为const引用类型。
2、构造一个匹配对象,作为查找的目标。
3、用比较函数指针构造一个TIdentityRelation对象。
4、在数组上调用Find(),同时传递TLinearOrder对象和匹配对象。
顺序数组中插入元素
inline TInt InsertInOrder(const T &anEntry, TLinearOrder< T > anOrder);
在元素按某一属性顺序排列的数组上使用指定的比较法则插入一个新对象,插入新对象后数组元素仍按这个属性值顺序排列。比较法则提供了一个函数来确定插入新对象的位置。若插入的对象在数组元素中有相同的属性值,则插入操作不进行。
插入的一般方法为:
1、定义一个比较函数比较插入对象与数组元素的属性值,如果对象的值相等,函数返回0;如果第一个值小,函数返回-1;如果第二个值小,函数返回+1。可以将该比较函数实现为静态成员函数、全局函数或命名空间的成员,比较函数的两个参数类型必须为const引用类型。
2、用比较函数指针构造一个TLinearOrder对象。
3、在数组上调用InserInOrder(),同时传递TLinearOrder对象和待插入的对象。
获得数组的元素数
inline TInt Count() const;
压缩数组空间
inline void Compress();
压缩数组空间,压缩后的数组空间将正好容纳所包含的元素。若要插入新元素,将导致数组重新分配新的空间。
重置数组
inline void Reset();
重置数组将释放所有元素所占的内存空间,并重置数组内部内部状态,以备重新使用。