Carbide c/c++ 中创建控制台项目TestArray
在TestArray.cpp中定义TStudent类用来存放学生的姓名、学号和分数
class TStudent
{
public:
TStudent(const TDesC& aName, TInt aNum, TInt aMark)
{
iName.Copy(aName);
iNum = aNum;
iMark = aMark;
}
TBuf<20> iName;
TInt iNum;
TInt iMark;
};
创建函数TestRArray()来实现学生信息的输入等操作
void TestRArray()
{
RArray<TStudent> stuRArray(10);
TStudent stu1(_L("Tom"),1,4);
TStudent stu2(_L("Jim"),2,3);
TStudent stu3(_L("John"),3,2);
User::LeaveIfError(stuRArray.Append(stu1)); //把学生信息添加到动态数组中去
User::LeaveIfError(stuRArray.Append(stu2));
User::LeaveIfError(stuRArray.Append(stu3));
_LIT(KString1,"Name = %s, Num = %d, Mark = %d/n"); //定义输出格式
for (TInt i=1; i<=stuRArray.Count(); i++)
{
console->Printf(KString1,&stuRArray[i].iName, stuRArray[i].iNum, stuRArray[i].iMark);
}
stuRArray.Close(); //关闭数组
}
然后在E32Main()主函数中调用 TestRArray()
编译运行后的结果如图一
现在来实现按分数对输出的结果进行排序
void TestRArray()
{
RArray<TStudent> stuRArray(10,_FOFF(TStudent,iMark)); //实现学生信息按分数的降序排列
TStudent stu1(_L("Tom"),1,4);
TStudent stu2(_L("Jim"),2,3);
TStudent stu3(_L("John"),3,2);
User::LeaveIfError(stuRArray.Append(stu1));
User::LeaveIfError(stuRArray.Append(stu2));
User::LeaveIfError(stuRArray.Append(stu3));
//stuRArray.SortUnsigned(); 此句的功能是实现学生信息的升序排列,如图三
_LIT(KString1,"Name = %s, Num = %d, Mark = %d/n");
for (TInt i=1; i<=stuRArray.Count(); i++)
{
console->Printf(KString1,&stuRArray[i].iName, stuRArray[i].iNum, stuRArray[i].iMark);
}
stuRArray.Close();
}
编译运行后的结果如图二
利用Sort对学生信息进行输出
这时把学生信息的输入学号稍做改动
TStudent stu1(_L("Tom"),1,4);
TStudent stu2(_L("Jim"),3,3);
TStudent stu3(_L("John"),2,2);
现在我们仍要求输入出的结果是按学号排序的
定义一个比较学号函数
TInt CompareNum(const TStudent& aStu1, const TStudent& aStu2)
{
if (aStu1.iNum < aStu2.iNum)
return(-1);
else if (aStu1.iNum > aStu2.iNum)
return (1);
else
return (0);
}
在TestRArray()中加入代码
TLinearOrder<TStudent> Order(CompareNum);
stuRArray.Sort(Order);
如
void TestRArray()
{
RArray<TStudent> stuRArray(10);
TStudent stu1(_L("Tom"),1,4);
TStudent stu2(_L("Jim"),3,3);
TStudent stu3(_L("John"),2,2);
User::LeaveIfError(stuRArray.Append(stu1));
User::LeaveIfError(stuRArray.Append(stu2));
User::LeaveIfError(stuRArray.Append(stu3));
TLinearOrder<TStudent> Order(CompareNum);
stuRArray.Sort(Order);
_LIT(KString1,"Name = %s, Num = %d, Mark = %d/n");
for (TInt i=1; i<=stuRArray.Count(); i++)
{
console->Printf(KString1,&stuRArray[i].iName, stuRArray[i].iNum, stuRArray[i].iMark);
}
stuRArray.Close();
}
编译运行后如图四示