0
点赞
收藏
分享

微信扫一扫

Qt容器之容器总述

Gaaidou 2022-03-12 阅读 128

Qt容器之容器总述

总述

Qt提供了通用的基于模版实现方式的容器类:能做到通用性很大程度上就是依靠 模板 特性。容器本身就是为了存储数据的,但是这里的数据主要是在程序运行时,存储在内存中的数据,运行结束后就释放内存了。

Qt的内置容器特点轻便线程安全、相对于STL更容易使用
Qt的容器是隐式共享的,它们是可重入的,并且它们针对速度、低内存消耗和最小的内联代码扩展进行了优化,从而产生了更小的可执行文件。此外,在它们被用于访问它们的所有线程用作只读容器的情况下,它们是线程安全的。

Qt支持两种访问容器数据的方式,提供了 Java-style 和 STL-style的迭代器,Java的那种方式更容易使用并高度功能化,同时STL的方式也很高效,并且支持STL的算法和容器结合的功能,异常强大。

Qt还提供了 foreach关键字,用来快速迭代整个容器(这个我经常使用)。

一、容器类

Qt提供了序列式容器: QList, QLinkedList, QVector, QStack, 以及QQueue.对于大多数应用开发来说,QList是最好的容器使用类型。QList被设计的其实是一个数组链表。因此它在链表头尾操作时有非常好效率。如果我们需要指针类型格式的链表,就要使用 QLinkedList。QVector的底层就是一个数组,那样它的内存和数组一样是连续的。常用的 LIFO(后入先出) 以及 FIFO(先入先出)等数据结果也有对应的容器:QStack、QQueue,也就是栈和堆。

Qt提供 关联式容器:QMap, QMultiMap, QHash, QMultiHash, 以及 QSet。带"Multi"容器可以方便地支持与单个键关联的多个值。哈希容器通过使用哈希函数而不是二进制搜索来对排序集提供更快的查找。
下面列出容器概述表

描述
QList这个类最常用,Qt很多API的容器参数基本上都是QList类型的【因为这个类开销小,很多API默认参数基本就是QList类型】,因为QList 是使用数组实现的,数据之间有顺序的,也就支持索引的方式,从而确保基于索引的访问非常快。数组有的功能,QList都有,增删改查,数组的优缺点,QList也是一样的继承下来了。【优点:索引方便、首尾添加方便;缺点:数据量巨大时插入不方便】
QLinkedList类似QList,除了实现的方式是指针结构体形式,而不是数组形式外,其他在使用是没啥区别;学过数据结构的都知道指针链表的特点是啥,插入快,遍历慢【都是数据量大的时候】
QVector特点:节点内存连续,优缺点和数组一致,但是功能封装的比数组强大。
QStack其实就是QVector的子类,使用了QVector的局部功能,就是使用了栈的特性(LIFO)
QQueue这个是QList的一个子类,使用的QList的局部功能,就是使用了队列的特性(FIFO)
QSet子集的特性:全局保留一份数组,可以去重复。
QMap<Key, T>这提供了一个字典(关联数组),该字典将 Key 类型的键映射到 T 类型的值。通常每个键都与单个值相关联。QMap按键顺序存储其数据;如果顺序无关紧要,QHash是一个更快的选择。 QMap会排序键,通过键访问值。
QMultiMap<Key, T>字面来看,就是一个键能对应多个值,类似信号可以关联多个槽函数一样,一对多
QHash<Key, T>也是和QMap功能相似,只是通过哈希算法实现的键值匹配,而且匹配更快,但是键是无序排列
QMultiHash<Key, T>和QMultiMap功能一直,只是实现方式不一致,有自己的适应范围。

二、迭代器

三、foreach 关键字

四、其他类似容器类

五、算法复杂度

六、增长策略

举报

相关推荐

0 条评论