Symbian学习笔记(9)——数组
【IT168 技术文档】数组是一个很基本的东西了,但是在Symbian中也做了比较人性化的封装,让我们可以省却不少代码,当然也让我们这些新手有点摸不着头脑。
三个类比较实用,需要掌握:TFixedArray、RArray和RPointerArray。
TFixedArray
它是最类似于我们平时使用的数组,从概念上或者从使用上都非常类似。
声明
TFixedArray iGrid;
使用
void CSuDoScAppView::InitGrid()
...{
for(TInt i=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(TInt j=0;j<9;j++) iGrid[i].tries[j]=0;
}
if(iHeart!=NULL)...{
iHeart->Cancel();
iTime=0;
iHeart->Start(ETwelveOClock,this);
}
}
...{
for(TInt i=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(TInt j=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 iList;
使用
void CSuDoScAppCtrol::LoadQuestions()
...{
RFile file;
TBuf8<4> bufC4;
TBuf8<81> bufC81;
if(KErrNone==file.Open(iFs,KTiDataFile,EFileRead))
...{
file.Read(bufC4,4);
TUint len=((TUint)bufC4[3]<<24)+((TUint)bufC4[2]<<16)+((TUint)bufC4[1]<<8)+(TUint)bufC4[0];
for(int i=0;i<len;i++)...{
TQuestion ti;
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(TInt i=0;i<81;i++)ti.data[i]=bufC81[i];
iList.Append(ti);
}
file.Close();
}
}
...{
RFile file;
TBuf8<4> bufC4;
TBuf8<81> bufC81;
if(KErrNone==file.Open(iFs,KTiDataFile,EFileRead))
...{
file.Read(bufC4,4);
TUint len=((TUint)bufC4[3]<<24)+((TUint)bufC4[2]<<16)+((TUint)bufC4[1]<<8)+(TUint)bufC4[0];
for(int i=0;i<len;i++)...{
TQuestion ti;
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(TInt i=0;i<81;i++)ti.data[i]=bufC81[i];
iList.Append(ti);
}
file.Close();
}
}
除了在析构函数中需要iList.Close()以外,事先不需要做什么初始化工作,一个个的Append进去就可以了。它也重载了运算符[],可以简单地访问其中的元素。
另外,RArray还提供了插入、查找、排序等功能。
RPointerArray
名字上说明它与指针有关,的确它与RArray的差别在于它不是保存对象的副本而是保存对象的指针。所以,使用上需要自己负责将元素删除。
声明
RPointerArray iThumbNormal;
使用
for(TInt i=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);
}
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(TInt i=0;i<9;i++)...{
delete iThumbNormal[i];
delete iThumbNormalMask[i];
}
iThumbNormal.Close();
delete iThumbNormal[i];
delete iThumbNormalMask[i];
}
iThumbNormal.Close();
此外,虽然SDK中我们也看到许多CDesXXXX的数组类,但是我觉得上面三个类应该可以应付我们大多数的场合了。
0
相关文章