⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dynamicarrays.cpp

📁 《基于symbian os的手机开发与应用》
💻 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 + -