vc Symbian开发15[精选].docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
symbian学习笔记十五:CArray 编辑文档 上一次,我们介绍了RArray和RPointerArray的使用,虽然说我们可以把他们看作是j2me中Vector的替代品(J2ME中是没有ArrayList的),但是,我们从上一次的例子中已经知道,RArray和RPointerArray是没有Delete方法的,换句话说是,只能添加,不能删除(什么啊,只进不出的...)(注,其实可以通过Remove方法进行删除的),因此,我们在实际应用中是无法替代Vector的,那么到底能不能替代呢?答案是肯定的,当然可以!使用CArray就可以了! 比起前面介绍的两个Array类,CArray更加的灵活! 首先来看看存储方式的不同吧~ CArray的存储方式分为连续存储(Flat)和分段存储(Segmented buffer)两种。 对于Flat方式,多用于查找比较频繁的地方。对于Segmented方式,多用于存储空间大小经常发生变化的时候。 由于存在连续存储和分段存储两种不同形式的存储,CArray可根据存储形式和存储内容的不同分为4种。 (1)Fix类型,每个元素都拥有相同的长度。 (2)Var类型,各元素拥有不同的长度,每给对象都保存在各自的堆单元中,数组空间中保存着各个元素的指针。 (3)Pak类型,数组中每个元素都有可变的长度,类似于描述符对象,每个元素前面都有其自身的长度信息。 (4)Ptr类型,指针数组。 在选择存储形式时,要考虑如下问题: (1)是否需要经常的重新分配 (2)数据元素插入和删除的效率 (3)访问数据成员的速度 ?下表中列出了可以使用的CArray类型: 名称? 元素大小? 缓冲器类型? 用法? CArrayFixFlat? 固定大小? 平面? 很少进行分配时,用于存储固定大小的T类和R类对象? CArrayVarFlat? 可变大小? 平面? 很少进行分配时,用于存储可变大小的T类和R类对象? CArrayPtrFlat? 指针? 平面? 很少进行分配时,用于对象指针? CArrayPakFlat? 大小可变(压缩)? 平面? 很少进行分配时,用于在一个堆单元中存储可变大小的T类或R类对象? CArrayFixSeg? 固定大小? 片断? 频繁进行分配时,用于存储固定大小的T类和R类对象? CArrayVarSeg? 可变大小? 片断? 频繁进行分配时,用于存储可变大小的T类和R类对象? CArrayPtrSeg? 指针? 片断? 频繁进行分配时,用于存储对象指针 ?从上表中,我们知道了CArray提供了多个版本的类用来提供给用户更多的选择。通常我们常用的有4种: CArrayVarFlat:存储可变长度元素,存储方式为Flat。 CArrayVarSeg:存储可变长度元素,存储方式为Segment。 CArrayPakFlat:存储固定的或者可变长度的元素,而且每个元素都保留自己的长度信息。 CArrayPtrFlag(此处应为CArrayPtrFlat):存储数组指针,存储方式为Segment。 ?下面,我们将使用CArrayFixFlat和CArrayFixSeg来写一个例子,实际上,在下面的那个例子里,两个数组是完全可以互换的,因此,我只需要写一个就足够了。 在给出例子之前,我们还要再讲一下CArray的排序与查找,由于CArray不同于RArray类,因此,在查找与排序方面也是有很大区别的。 对于排序,我们首先要构造一个适当的键,这个键将是你排序的根本,在声明键时要指明排序的类型、字段偏移量和文本长度。其次,将键传入Sort()方法中进行排序。 下表为CArray类不同类型时,所要用到的键类型: 名称? 键类型? 说明? CArrayFixFlat? TKeyArrayFix???? CArrayVarFlat? TKeyArrayVar???? CArrayPtrFlat? TKeyArrayFix派生类? 需要特殊实现? CArrayPkgFlat? TKeyArrayVar???? CArrayFixSeg? TKeyArrayFix???? CArrayVarSeg? TKeyArrayVar???? CArrayPtrSeg? TKeyArrayFix派生类? 需要特殊实现 由于下面的例子中,我们使用了CArrayFixFlat,因此我们的键就是TKeyArrayFix(依照上表),TKeyArrayFix(TInt anOffset,TKeyCmpText aType)。这两个参数是: TInt anOffset —类中字段的偏移量 TKeyCmpText aType — 对应字段的类型 对

文档评论(0)

dart001 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档