📄 dynamicarrays.cpp
字号:
// DynamicArrays.cpp
//Author:LiuLiPing
//version 1.0
//Date: 2006-2-18
// Examples to demonstrate arrays
#include "CommonFramework.h"
#include <e32math.h>
void FruitRArray();
void FruitFixFlat();
//
// Common literal text
//
_LIT(KMsgPressAnyKey," (press any key to continue)\n");
_LIT(KMsgInsert,"\n\n--->InsertL\n");
_LIT(KMsgModify,"\n\n--->Modify\n");
_LIT(KMsgDelete,"\n\n--->Delete\n");
_LIT(KMsgFind,"\n\n--->Find\n");
_LIT(KMsgSortID,"\n\n--->SortID\n");
_LIT(KMsgSortName,"\n\n--->SortName\n");
_LIT(KMsgNewLine,"\n");
//
// Common format strings
//
_LIT(KName,"Name is:");
_LIT(KID,"ID is: %d\n");
_LIT(KPrice,"Price is: %f\n");
//
// A T type class used in the example demonstrating the:
// RArray class and CArrayFixFlat class
//
class TFruit
{
public :
TFruit(TInt aID, const TDesC& aName, TReal aPrice);
~TFruit();
public :
TInt iID; //水果的ID
HBufC* iName; //水果名
TReal iPrice; //水果的单价
};
TFruit::TFruit(TInt aID, const TDesC& aName, TReal aPrice)
{
iID = aID;
iName = aName.Alloc();
iPrice = aPrice;
}
TFruit::~TFruit()
{
delete iName;
iName = NULL;
iID = 0;
iPrice = 0;
}
//
//比较ID ,用于按水果的ID排序(从1——n)
//
TInt CompareFruitID(const TFruit& aFruit1, const TFruit& aFruit2)
{
if(aFruit1.iID>aFruit2.iID)
return 1;
if(aFruit1.iID==aFruit2.iID)
return 0;
else
return -1;
}
//
//比较名字,用于按水果的名字排序(从A——Z)
//
TInt CompareFruitName(const TFruit& aFruit1, const TFruit& aFruit2)
{
TPtr ptr1 =aFruit1.iName->Des();
TPtr ptr2 =aFruit2.iName->Des();
return ptr1.Compare(ptr2);
}
//
//比较两个水果名是否相同(用于查找)
//
TBool FindFruitName(const TFruit& aFruit1, const TFruit& aFruit2)
{
if(*aFruit1.iName==(*aFruit2.iName))
return ETrue;
else
return EFalse;
}
void FruitRArray()
{
RArray<TFruit> rarray; //用RArray类存储数据
CleanupClosePushL(rarray); //压入清理栈
_LIT(KFruit1,"watermelon");
TBuf<12> buf1(KFruit1);
_LIT(KFruit2,"peach");
TBuf<10> buf2(KFruit2);
_LIT(KFruit3,"orange");
TBuf<10> buf3(KFruit3);
TFruit fruit1(1,buf1,1.5);
TFruit fruit2(2,buf2,2.8);
TFruit fruit3(3,buf3,1.2);
rarray.Append(fruit1); //添加数据到数组中
rarray.Append(fruit2);
for(TInt i=0;i<rarray.Count();i++) //显示数组中所有的数据
{
console->Printf(KID,rarray[i].iID);
console->Printf(KName);
TPtr ptr = rarray[i].iName->Des();
console->Printf(ptr);
console->Printf(KMsgNewLine);
console->Printf(KPrice,rarray[i].iPrice);
console->Printf(KMsgNewLine);
}
console->Printf(KMsgPressAnyKey);
console->Getch();
console->Printf(KMsgInsert);
rarray.Insert(fruit3,0); //向数组插入数据,插入的数据是数组的第一个元素
for(i=0;i<rarray.Count();i++)
{
console->Printf(KID,rarray[i].iID);
console->Printf(KName);
TPtr ptr = rarray[i].iName->Des();
console->Printf(ptr);
console->Printf(KMsgNewLine);
console->Printf(KPrice,rarray[i].iPrice);
console->Printf(KMsgNewLine);
}
console->Printf(KMsgPressAnyKey);
console->Getch();
console->Printf(KMsgModify);
_LIT(KNewFruit,"apple");
TBuf<10> buf(KNewFruit);
rarray[1].iName = buf.Alloc(); //修改数组第二个元素的名字
for(i=0;i<rarray.Count();i++)
{
console->Printf(KID,rarray[i].iID);
console->Printf(KName);
TPtr ptr = rarray[i].iName->Des();
console->Printf(ptr);
console->Printf(KMsgNewLine);
console->Printf(KPrice,rarray[i].iPrice);
console->Printf(KMsgNewLine);
}
delete rarray[1].iName;
console->Printf(KMsgPressAnyKey);
console->Getch();
console->Printf(KMsgFind);
TInt findPos;
TFruit S1(1,buf1,1.5);
if((findPos=rarray.Find(S1))!=KErrNotFound) //在数组中查找名buf1的水果,如果有就打印该水果的名字
{
TPtr ptr = rarray[findPos-1].iName->Des();
console->Printf(_L("Find!!"));
console->Printf(ptr);
console->Printf(KMsgNewLine);
}
TFruit S2(0,buf2,0);
TIdentityRelation<TFruit> find(FindFruitName);
if((findPos=rarray.Find(S2,find))!=KErrNotFound)//在数组中查找名buf1的水果,如果有就打印该水果的名字
{
TPtr ptr = rarray[findPos].iName->Des();
console->Printf(_L("Find!!"));
console->Printf(ptr);
console->Printf(KMsgNewLine);
}
console->Printf(KMsgPressAnyKey);
console->Getch();
console->Printf(KMsgSortID);
TLinearOrder<TFruit> sort1(CompareFruitID); //按照水果的ID排序
rarray.Sort(sort1);
for(i=0;i<rarray.Count();i++)
{
console->Printf(KID,rarray[i].iID);
console->Printf(KName);
TPtr ptr = rarray[i].iName->Des();
console->Printf(ptr);
console->Printf(KMsgNewLine);
console->Printf(KPrice,rarray[i].iPrice);
console->Printf(KMsgNewLine);
}
console->Printf(KMsgPressAnyKey);
console->Getch();
console->Printf(KMsgSortName);
TLinearOrder<TFruit> sort2(CompareFruitName); //按照水果的名字排序
rarray.Sort(sort2);
for(i=0;i<rarray.Count();i++)
{
console->Printf(KID,rarray[i].iID);
console->Printf(KName);
TPtr ptr = rarray[i].iName->Des();
console->Printf(ptr);
console->Printf(KMsgNewLine);
console->Printf(KPrice,rarray[i].iPrice);
console->Printf(KMsgNewLine);
}
rarray.Reset();
CleanupStack::PopAndDestroy();
}
void FruitFixFlat()
{
CArrayFixFlat<TFruit>* fixflat; //用CArrayFixFlat存储数据
fixflat= new (ELeave) CArrayFixFlat<TFruit>(5); //申请空间
_LIT(KFruit1,"watermelon");
TBuf<12> buf1(KFruit1);
_LIT(KFruit2,"peach");
TBuf<10> buf2(KFruit2);
_LIT(KFruit3,"orange");
TBuf<10> buf3(KFruit3);
TFruit fruit1(1,buf1,1.5);
TFruit fruit2(2,buf2,2.8);
TFruit fruit3(3,buf3,1.2);
fixflat->AppendL(fruit1); //将数据添加到数组中
fixflat->AppendL(fruit2);
for(TInt i=0;i<fixflat->Count();i++) //显示数组中所有的数据
{
console->Printf(KID,(*fixflat)[i].iID);
console->Printf(KName);
TPtr ptr = (*fixflat)[i].iName->Des();
console->Printf(ptr);
console->Printf(KMsgNewLine);
console->Printf(KPrice,(*fixflat)[i].iPrice);
console->Printf(KMsgNewLine);
}
console->Printf(KMsgPressAnyKey);
console->Getch();
console->Printf(KMsgInsert);
fixflat->InsertL(0,fruit3); //向数组插入数据,插入数据是数组的第一个元素
for(i=0;i<fixflat->Count();i++)
{
console->Printf(KID,(*fixflat)[i].iID);
console->Printf(KName);
TPtr ptr = (*fixflat)[i].iName->Des();
console->Printf(ptr);
console->Printf(KMsgNewLine);
console->Printf(KPrice,(*fixflat)[i].iPrice);
console->Printf(KMsgNewLine);
}
console->Printf(KMsgPressAnyKey);
console->Getch();
console->Printf(KMsgModify);
_LIT(KNewFruit,"apple");
TBuf<10> buf(KNewFruit);
(*fixflat)[1].iName = buf.Alloc(); //修改数组第二个元素的名字
for(i=0;i<fixflat->Count();i++)
{
console->Printf(KID,(*fixflat)[i].iID);
console->Printf(KName);
TPtr ptr = (*fixflat)[i].iName->Des();
console->Printf(ptr);
console->Printf(KMsgNewLine);
console->Printf(KPrice,(*fixflat)[i].iPrice);
console->Printf(KMsgNewLine);
}
delete (*fixflat)[1].iName;
console->Printf(KMsgPressAnyKey);
console->Getch();
console->Printf(KMsgDelete);
fixflat->Delete(1); //删除数组第二个元素
for(i=0;i<fixflat->Count();i++)
{
console->Printf(KID,(*fixflat)[i].iID);
console->Printf(KName);
TPtr ptr = (*fixflat)[i].iName->Des();
console->Printf(ptr);
console->Printf(KMsgNewLine);
console->Printf(KPrice,(*fixflat)[i].iPrice);
console->Printf(KMsgNewLine);
}
console->Printf(KMsgPressAnyKey);
console->Getch();
console->Printf(KMsgFind);
TKeyArrayFix nameKey(_FOFF(TFruit,iName),ECmpNormal);
TInt findPos;
TFruit S(2,buf2,2); //在数组中查找名为buf2的元素,如果有打印该水果的名字
if(fixflat->Find(S,nameKey,findPos)!=KErrNotFound)
{
TPtr ptr = (*fixflat)[findPos-1].iName->Des();
console->Printf(_L("Find!!"));
console->Printf(ptr);
console->Printf(KMsgNewLine);
}
console->Printf(KMsgPressAnyKey);
console->Getch();
console->Printf(KMsgSortID);
TKeyArrayFix IDKey(_FOFF(TFruit,iID),ECmpTInt32);
User::LeaveIfError(fixflat->Sort(IDKey)); //按照水果的ID排序
for(i=0;i<fixflat->Count();i++)
{
console->Printf(KID,(*fixflat)[i].iID);
console->Printf(KName);
TPtr ptr = (*fixflat)[i].iName->Des();
console->Printf(ptr);
console->Printf(KMsgNewLine);
console->Printf(KPrice,(*fixflat)[i].iPrice);
console->Printf(KMsgNewLine);
}
delete fixflat;
}
// Do the example
LOCAL_C void doExampleL()
{
console->Printf(_L("*****Rarray*****\n"));
FruitRArray();
console->Printf(_L("\n***CArrayFixFlat***\n"));
FruitFixFlat();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -