|
RArray类,属于symbian OS提供的基础容器类,并且是比较重要和常用的一个。 如果从名字来看这是一个数据类,功能貌似和 MFC的CArray,stl的vector差不多吧? 尤其是他提供的排序和查找功能,其实现方法比较诡异,对初学者来说容易造成迷惑。 RArray的排序是这样的,它规定数组中每个元素可以有一个 order key,这个order key其实就是数组元素的某4个字节 就是说,默认情况下,数组里面每个元素的前4个字节会被用来作为排序的key。 比如我们声明一个 结构体 Bar 作为数组的元素,然后构建一个Bar的数组 barArray struct Bar RArray<Bar> barArray; 于是 iId就会成为order key了,因为默认情况下key offset 为0,iId就是元素的头4个字节。 如果需要RArray的排序功能那么 你就需要用到一系列名字中带有KeyOrder的函数比如 InsertInSignedKeyOrderL,FindInSignedKeyOrderL等等 Insert操作时,会按照插入元素的order key排序来查找合适的Insert位置。 注意 函数名中的 Signed,还有与之对应的 Unsigned,这些表示比较order key的时候是否考虑符号。 如果你不用这些带有KeyOrder的系列函数,那么和一个CArray的数组基本一样。 另外 RArray有2个特化版本,RArray<TInt>,RArray<TUint>,可能是为了提高效率吧。 现在我明白Symbian 里为什么没有 list map 等容器类了,RArray实在是一专多能。 |