Symbian中的动态集合Rarray的使用(页 1) - Symbian开发 - JBL...

来源:百度文库 编辑:神马文学网 时间:2024/04/30 11:44:59
Symbian中的动态集合Rarray的使用
[size=4]有C++经验的人,刚开始写sybmian程序,往往觉得sybmian的数据结构都比较奇怪,比如描述符,比如动态数组,另外很有用的一些C++的数据结构,比如map之类的都没提供,通用的STL类型也没法在symbian中使用。
但实际上Rarray是一个设计的很有意思的类,它提供了InsertInOrder、FindInOrder两个函数,分别可以按照排序方式插入记录和快速查找功能。这两个函数,都使用了一个TLinearOrder anOrder结构。而TLinearOrder提供一个TLinearOrder(TInt(*anOrder)(const T&,const T&));构造函数,这个构造函数的参数是一个函数指针,指向一个比较大小的函数。[/size]
[size=4]    struct TIndex
{
TUint        index;
TBuf8<10>    key;
};
[/size]
[size=4]    // 比较函数
TInt CompareKey (const struct TIndex& First, const struct TIndex& Second)
{
return First.key.Compare(Second.key);
}[/size]
[size=4]    TLinearOrder          anOrder(CompareKey);
RPointerArray         IndexTest;[/size]
[size=4]    // 插入记录
struct TIndex* pIndexText = new (ELeave) TIndex;
pIndexText->index = 0;
pIndexText->key.Copy(_LIT8("test"));
IndexTest.InsertInOrder(pIndexText, anOrder);[/size]
[size=4]    // 查找记录
TInt Pos = 0;
struct TIndex Finder;
Finder.index = 100;
Finder.key.Copy(_LIT8("test"));[/size]
[size=4]    if((Pos=IndexTest.FindInOrder(&Finder, anOrder)) != KErrNotFound)
{
// 找到了对应内容, 处理...
}
[/size]