1、Qt容器v两个大类:容器元素是一个值的,比如QVector,以及容器元素是一个(key,value)对的,比如QMapvQStringList:join(),filter()vQLinkedList:固定的时间内完成元素的插入/删除操作vQMap:元素有序排列vQHash:能够快速地依据key定位某个元素QTL容器的迭代器 STL风格的Java 风格的关键字foreach通用算法vqSort 使用快速排序算法,将一个元素序列排成升序。vqStableSort也能完成类似的排序操作,但是能够确保值相等的元素在排序前后相对顺序不变v通用算法qBinaryFind使用二分搜索算法vqFill将一个元
2、素序列中的每个元素设置为一个相同的值。vqCopy按照从前向后的顺序将一个元素序列复制到所在容器的其他位置或者另外一个容器中。vqCopyBackward完成类似的操作,但是按照从后向前的顺序。vqDeleteAll调用C+运算符delete,析构容器中的元素。函子v回调函数(callback function)void qsort(void*base,size_t num,size_t width,int(*compare)(const void*,const void*);v部分通用算法也需要使用类似的机制。例如,通用算法 void qSort(RandomAccessIterator b
3、egin,RandomAccessIterator end,LessThan lessThan)v容器元素的类型是由模板参数指定的,因而是不确定的,而普通函数只能够处理确定类型的数据v使用类模板而不是类来完成这个任务。类型分类技术在QList中的应用 vQList并没有使用数据结构课程中的单向链表或者双向链表来存储容器元素。依据容器元素类型的不同,它采用不同的数据结构来处理,以达到节省内存、提高处理速度的目的。v容器元素的类型被表示为Qlist的模板参数T。为了获取T的具体信息,QList用到了3.3节阐述的类型分类技术。v如果T占用的内存较多,QList将每个容器元素存放在堆中,再维护一个指针数组v如果T是一个指针类型,或者它所占字节数小于指针所占字节数(比如T为char),我们可以将T直接存放在指针数组中以节省内存在容器的首、尾删除或者插入元素时,可能并不需要调用memmove函数,而只是对begin或者end做简单的修改即可QListData中指针数组的每个元素被表示为类Node