WEB开发网
开发学院手机开发Symbian 开发 Symbian 中的动态数组 CArrayX 阅读

Symbian 中的动态数组 CArrayX

 2010-08-31 00:12:00 来源:WEB开发网   
核心提示:Symbian OS 中的动态数组CArrayX的存储方式分为连续存储(Flat)和分段存储(Segmented buffer)两种,对于Flat方式,Symbian 中的动态数组 CArrayX,多用于查找比较频繁的地方,对于Segmented方式,下表为CArray类不同类型时,所要用到的键类型:由于下面的例子中,

Symbian OS 中的动态数组CArrayX的存储方式分为连续存储(Flat)和分段存储(Segmented buffer)两种。

对于Flat方式,多用于查找比较频繁的地方。对于Segmented方式,多用于存储空间大小经常发生变化的时候。

由于存在连续存储和分段存储两种不同形式的存储,CArray可根据存储形式和存储内容的不同分为4种。

(1)Fix类型,每个元素都拥有相同的长度。

(2)Var类型,各元素拥有不同的长度,每给对象都保存在各自的堆单元中,数组空间中保存着各个元素的指针。

(3)Pak类型,数组中每个元素都有可变的长度,类似于描述符对象,每个元素前面都有其自身的长度信息。

(4)Ptr类型,指针数组。

在选择存储形式时,要考虑如下问题:

(1)是否需要经常的重新分配

(2)数据元素插入和删除的频率

(3)访问数据成员的速度

下表中列出了可以使用的CArray类型:

image

从上表中,我们知道了CArray提供了多个版本的类用来提供给用户更多的选择。通常我们常用的有4种:

CArrayVarFlat:存储可变长度元素,存储方式为Flat。

CArrayVarSeg:存储可变长度元素,存储方式为Segment。

CArrayPakFlat:存储固定的或者可变长度的元素,而且每个元素都保留自己的长度信息。

CArrayPtrFlat:存储数组指针,存储方式为Segment。

◎ 下面,我们将使用CArrayFixFlat和CArrayFixSeg来写一个例子,实际上,在下面的那个例子里,两个数组是完全可以互换的,因此,我只需要写一个就足够了。

在给出例子之前,我们还要再讲一下CArray的排序与查找,由于CArrayX不同于RArray类,因此,在查找与排序方面也是有很大区别的。

对于排序,我们首先要构造一个适当的键,这个键将是你排序的根本,在声明键时要指明排序的类型、字段偏移量和文本长度。其次,将键传入Sort()方法中进行排序。

下表为CArray类不同类型时,所要用到的键类型:

image

由于下面的例子中,我们使用了CArrayFixFlat,因此我们的键就是TKeyArrayFix(依照上表)

1 2 3 4  下一页

Tags:Symbian 动态 数组

编辑录入:coldstar [复制链接] [打 印]
赞助商链接