对数组的总结
RArray 是保存 T或R类对像的
RPointArray 是保存 T或R类对像的地址的
RArray 通常用于存储固定长度的对像
CArrayFixFlat 与 CArrayVarFlat 分别是保存固定和可变长度的对像的,CArrayPtrFlat 是保存指针的
CArrayPakFlat 用于很少分配时,在堆中存储可变大小的T或R类对像
CArrayXXXSeg 是通过双向链表存放的,用于经常进行分配的数据对像,Fix、Var、Ptr 与 CArrayXXXFlat 一样
关于创建与释放:
RArray 创建时通过 RArray<类型> 变量名 ,创建后通过 CleanupClosePushL() 添加到清除栈,用完后通过 Reset() 清空对像及CleanupStack::PopAndDestroy() 从清除栈中清理
RPointArray 与 RArray 的创建与释放一样
两者的查找与排序是通过 TIdentityRelation 及 TLinearOrder实现的,创建时需要传入一用于查找或排序的函数,这种方法适用于自定义的查找或排序
CArrayXXX 创建时是创建的指针,通过 delete 来回收资源
查找与排序:
对于保存对像的有固定的类用于查找或排序 TKeyArrayFix,TKeyArrayVar
对于保存指针用于查找及排序要从 TKeyArrayFix 派生,一般写成下面的固定格式
代码
class TKeyArrayPtr:public TKeyArrayFix { public: inline TKeyArrayPtr(TInt anOffset,TKeyCmpText aType):TKeyArrayFix(anOffset,aType) {} inline TKeyArrayPtr(TInt aOffset, TKeyCmpText aType, TInt aLength) : TKeyArrayFix(aOffset, aType, aLength) {}; inline TKeyArrayPtr(TInt aOffset, TKeyCmpNumeric aType) : TKeyArrayFix(aOffset, aType) {}; virtual TAny* At(TInt anIndex) const { if (anIndex == KIndexPtr) return *(TUint8**)iPtr+iKeyOffset; else return *(TUint8**)iBase->Ptr(anIndex* sizeof(TUint8**)).Ptr()+iKeyOffset; } }; |
安平2009@原创
qi_jianzhou@126.com