对数组的总结

对数组的总结

 

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

posted @ 2010-01-20 22:13  zziss  阅读(216)  评论(0编辑  收藏  举报