`
yesjavame
  • 浏览: 687135 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Symbian学习笔记(9):数组

阅读更多
数组是一个很基本的东西了,但是在Symbian中也做了比较人性化的封装,让我们可以省却不少代码,当然也让我们这些新手有点摸不着头脑。

三个类比较实用,需要掌握:TFixedArray、RArray和RPointerArray。

TFixedArray
它是最类似于我们平时使用的数组,从概念上或者从使用上都非常类似。
//声明
TFixedArray<TGridCell,81>iGrid;

//使用
voidCSuDoScAppView::InitGrid()
...{
for(TInti=0;i<81;i++)
...{
if(iCurQs->data[i]==0)
...{
iGrid[i].state
=TGridCell::ECSTATE_EMPTY;
}

else
...{
iGrid[i].state
=TGridCell::ECSTATE_FIXED;
}

iGrid[i].value
=iCurQs->data[i];
for(TIntj=0;j<9;j++)iGrid[i].tries[j]=0;
}

if(iHeart!=NULL)...{
iHeart
->Cancel();
iTime
=0;
iHeart
->Start(ETwelveOClock,this);
}

}

把它当成普通的数组来用就OK了,一般也就是用它重载的运算符[]和Count(),不需new也不需要delete。

RArray
从名字上看它以R开头,至少说明一点,在使用完后我们需要将它Close掉。在使用上也比较简单,类似于ArrayList吧。比如下面代码:
//声明
RArray<TQuestion>iList;

//使用
voidCSuDoScAppCtrol::LoadQuestions()
...{
RFilefile;
TBuf8
<4>bufC4;
TBuf8
<81>bufC81;

if(KErrNone==file.Open(iFs,KTiDataFile,EFileRead))
...{
file.Read(bufC4,
4);
TUintlen
=((TUint)bufC4[3]<<24)+((TUint)bufC4[2]<<16)+((TUint)bufC4[1]<<8)+(TUint)bufC4[0];

for(inti=0;i<len;i++)...{
TQuestionti;
bufC4.FillZ();
file.Read(bufC4,
4);
ti.code
=((TUint)bufC4[3]<<24)+((TUint)bufC4[2]<<16)+((TUint)bufC4[1]<<8)+(TUint)bufC4[0];
bufC4.FillZ();
file.Read(bufC4,
4);
ti.time
=0;
bufC81.FillZ();
file.Read(bufC81,
81);
for(TInti=0;i<81;i++)ti.data[i]=bufC81[i];
iList.Append(ti);
}

file.Close();
}


}

除了在析构函数中需要iList.Close()以外,事先不需要做什么初始化工作,一个个的Append进去就可以了。它也重载了运算符[],可以简单地访问其中的元素。

另外,RArray还提供了插入、查找、排序等功能。

RPointerArray
名字上说明它与指针有关,的确它与RArray的差别在于它不是保存对象的副本而是保存对象的指针。所以,使用上需要自己负责将元素删除。
//声明
RPointerArray<CFbsBitmap>iThumbNormal;

//使用
for(TInti=0,j=0;i<9;i++,j+=2)...{
CFbsBitmap
*b=NULL;
CFbsBitmap
*c=NULL;
AknIconUtils::CreateIconL(b,c,iMFileName,EMbmSudoscY1
+j,EMbmSudoscY1+j+1);
AknIconUtils::SetSize(b,TSize(
22,22));
AknIconUtils::SetSize(c,TSize(
22,22));
iThumbNormal.AppendL(b);
iThumbNormalMask.AppendL(c);
}


//删除
for(TInti=0;i<9;i++)...{
deleteiThumbNormal[i];
deleteiThumbNormalMask[i];

}

iThumbNormal.Close();

此外,虽然SDK中我们也看到许多CDesXXXX的数组类,但是我觉得上面三个类应该可以应付我们大多数的场合了。

[补充@2008-3-24]
因为上面三个数组是平台缓冲的,所以并不适合在插入较多的场合,如果你的数组经常插入元素,还是建议使用CArrayXXXXXSeg之类的数组类来实现。

[补充@2008-3-25]
谢谢bluepac网友的讨论,现在我补充说明一下:

虽然我觉得上述三个数组类可以解决我们大多数的应用场合,但并非它们就是万能的了。

Symbian不提倡我们直接使用C++数组,就象不提倡我们直接使用int,char一样,它提供了大量的有益的替代类。我们只需要记住:既然在Symbian平台上开发,就要听话哦。反正我从小都一直是听话的孩子。

还有两类数组,一类是描述符作为元素的CDesCXXX or CPtrCXXX。很好理解它们的元素都是描述符罢了,只是注意它的名称后面有一个Flat或者Seg,表示是平面(连续空间、访问效率高)还是分段(非连续空间、适于插入较多的场合)。

另一类就是CArrayXXX之类的动态数组了,它们也相当重要。与描述符数组不同,它们用模板声明元素类型。
CArrayFixFlat<class T> or CArrayFixSeg<class T>,名字中的Fix则 要求元素是定长的对象,可以是T类或者C类。
CArrayPtrFlat<class T> or CArrayPtrSeg<class T>,因为是指针就无所谓元素要求定长了。

而RArray<class T>其实也有同样的要求是定长对象,其实很好理解,除了用指针以外,数组怎么都要求是定长对象放进去。

再次感谢bluepac对我的帮助。
分享到:
评论

相关推荐

    symbian学习笔记(超级经典-适用于初学者)

    本学习笔记旨在为初学者提供全面、细致的Symbian操作系统知识,帮助你快速入门并深入理解其工作原理。 一、Symbian系统概述 Symbian操作系统最初由英国的EPOC公司开发,后被诺基亚收购并成为其主要的操作系统平台。...

    symbian学习笔记,全28讲

    【Symbian学习笔记概述】 Symbian操作系统是一款曾经广泛应用于智能手机的操作系统,尤其在诺基亚手机上占据主导地位。对于想要学习Symbian开发的初学者来说,理解其开发环境的搭建至关重要。本系列笔记共28讲,...

    Symbian学习笔记

    这些"Symbian学习笔记"涵盖了关于该平台的广泛知识,包括系统架构、编程语言、开发环境以及应用构建等方面。 1. **Symbian系统架构**:Symbian采用微内核设计,由四个主要部分组成:实时操作系统内核(OS Kernel)...

    symbian 数组排序

    在Symbian操作系统中,数组排序是一个常见的编程任务,特别是在处理大量数据时,例如在数据库操作中。Symbian提供了一系列的工具和方法来帮助开发者有效地对数组进行排序。本篇将深入探讨Symbian中数组排序的相关...

    Symbian学习笔记(中国移动开发者社区).pdf

    学习 CleanupStack #### 5.1 CleanupStack 的概念 CleanupStack 是 Symbian 系统中一种特殊的数据结构,主要用于异常处理和资源清理。当程序发生异常时,CleanupStack 会自动回溯并清理之前分配的资源,避免内存...

    symbian 学习笔记

    **Symbian操作系统详解** Symbian是一款历史悠久的智能手机操作系统,尤其在2000年至2010年间,它是全球领先的移动设备...通过深入学习和实践,开发者可以从Symbian中学到很多关于移动平台优化和资源管理的宝贵经验。

    Symbian sdk帮助术语表

    根据给定的文件信息,以下是对Symbian SDK帮助术语表中的关键术语及概念的详细解释: ### abld.bat - **定义**:abld.bat 是一个批处理文件(Batch File),用于自动化构建过程。 - **功能**:该文件通过调用 ...

    Symbian塞班操作系统

    ### Symbian塞班操作系统深度解析 #### Symbian简介:智能移动终端的先驱者 Symbian操作系统,源自英国宝意昂公司(Psion)的EPOC操作系统,其设计理念强调“使用电子产品如同品尝乳酪般简单”。EPOC的命名灵感...

    JAVA 五年的工作经验和学习笔记

    由于本人目前允许上传的资源太小,所以无法上传整个的技术学习笔记(JAVA 五年的工作经验和学习笔记),待以后有机会会分享给大家。 技术体系包括: J2SE/J2ME/J2EE/JAVA代码优化/Flex(BlazeDS、PureMVC等技术)...

    真正的Symbian笔记.docx

    以上知识点构成了Symbian笔记的主要内容,通过学习这份笔记,开发者不仅可以理解Symbian操作系统的运作原理,还能掌握实际开发中的技巧和最佳实践。虽然Symbian系统现在已不流行,但其设计理念和许多技术仍对现代...

    将指定的图像多文件生成CFbsBitmap数组 对象

    总结来说,将指定的图像多文件生成`CFbsBitmap`数组对象涉及文件读取、图像解码、位图创建、数据填充、数组管理和资源释放等多个环节,需要对Symbian的图形系统有深入的理解。通过熟练运用Symbian提供的工具和类库,...

    Symbian动态数组与缓冲区

    在Symbian操作系统中,动态数组和缓冲区的管理是至关重要的,特别是在嵌入式开发领域,高效且安全的数据结构是程序性能的关键因素。这里主要介绍Symbian系统中的RArray、RPointerArray以及CArrayX系列类,它们都是...

    转:webkit开发学习笔记(全面)_第一版

    **WebKit 开发学习笔记概述** WebKit 是一个开源的网页内容渲染引擎,被广泛应用于各种浏览器,包括谷歌的 Chrome、苹果的 Safari、以及许多其他双核浏览器。WebKit 的诞生源自苹果公司在其 Mac OS X 操作系统中对 ...

    Symbian 开发三步曲:Symbian OS C++ For Mobile Phones Ⅰ Ⅱ Ⅲ

    开发者可以学习如何利用Symbian OS提供的API来构建复杂的应用程序,同时了解如何优化性能、处理多任务并行和数据同步等问题。这部分内容将帮助开发者提升应用的实用性和用户体验。 **第三步:Symbian OS C++ For ...

    Symbian学习资料(英文版)

    这个压缩包“Symbian学习资料(英文版)”显然包含了关于Symbian系统的学习资源,可能是手册、教程、代码示例或者相关的技术文档。 在深入探讨Symbian操作系统之前,我们先来理解一下它的核心概念。Symbian是由...

Global site tag (gtag.js) - Google Analytics