news 2026/5/23 12:29:45

16. Qt深入 容器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
16. Qt深入 容器

1. QVector

数组我们都非常熟悉,数据在内存中是连续分布的。这种结构的缺点是当元素很多时,除了在结尾添加一个新元素以及修改某个元素值之外,其他相关的函数(如最开头插入)执行起来会随元素增多而变慢。因为主要是保证是占用连续的内存空间,因此插入新元素后,后面的元素都要顺次往后移动。Qt 库封装数组的类是 QVector。

2. QList

链表是一种在内存中非连续的存储结构,元素的逻辑顺序是通过链表中的指针链接次序实现的。每一个元素都包括两个值:自身数据 + 下一个元素的地址(指针)。Qt 库封装链表的类是 QList。

这种结构在插入的时候可以达到O(1)的复杂度,也就是在任何位置插入一个新元素所执行的时间是固定的。举个例子,假如我在元素2和元素3中间插入一个新元素n,无非就是把元素2和元素3之间的链子砍断,然后重新设置指向而已。这种结构可以克服需要预先知道数据大小的缺点,还可以充分利用计算机内存空间(因为不需要一块连续的内存空间嘛),实现灵活的内存动态管理。缺点就是查找某个元素会特别耗时,它不像数组那样内部用红黑树来查找。

3. QSet

QSet< QString>set;
QSet 是一个集合类,存储不重复的元素。底层基于QHash
元素的顺序是不确定的,不支持索引访问。
使用哈希表实现,具有高效的插入、删除和查找操作。
适用于需要存储不重复元素并且需要高效的插入、删除和查找的场景。

4. QMap

QMap<QString, int> map;
QMap 是一个关联容器类,存储键值对(key-value pairs)。
元素按照键的排序顺序存储,支持按键进行快速查找。
适用于需要按键进行快速查找和排序的场景。

5. QHash

QHash<int, QString> qhash;
QHash 采用哈希表作为底层数据结构。哈希表使用一个哈希函数将元素映射到数组中的一个位置(称为桶)。当发生哈希冲突(不同元素映射到相同的桶)时,QHash 使用链地址法(chaining)来解决冲突,这意味着每个桶实际上是一个链表,存储哈希冲突的元素。

6. QMultiMap

QMultiMap<QString, int> multimap;

7. QStack QQueue

区别

.存储方式
QVector:动态数组,元素在内存中连续存储。
QList:链表,元素在内存中非连续存储。
QSet:集合,元素无序存储,用于快速查找元素是否存在。
QMap:关联数组,元素以键值对的形式存储,支持快速查找。

访问速度
QVector:随机访问元素较快,但插入和删除操作较慢。
QList:插入和删除操作较快,但随机访问元素较慢。
QSet:查找元素是否存在较快,但其他操作较慢。
QMap:快速查找键值对,插入和删除操作也较快。

容量与内存占用
QVector:内存占用相对较小,但容量受限于内存大小。
QList:内存占用相对较大,但容量不受限于内存大小。
QSet:内存占用较小,但容量也较小。
QMap:内存占用较大,但容量也较大。

应用场景
QVector:适用于需要频繁随机访问元素的场景,如数组计算、数据处理等。
QList:适用于需要频繁插入和删除元素的场景,如动态规划、数据结构算法等。
QSet:适用于需要快速检查元素是否存在的场景,如集合运算、事件处理等。
QMap:适用于需要快速查找键值对的场景,如数据持久化、数据缓存等。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 7:31:42

Go 语言

安装go语言 https://golang.google.cn/dl/

作者头像 李华
网站建设 2026/5/20 23:13:24

**方言AI配音工具2025推荐,解锁多场景语音内容创作新体

方言AI配音工具2025推荐&#xff0c;解锁多场景语音内容创作新体验在短视频、有声书、本地化内容营销日益火爆的2025年&#xff0c;据《2025年中国数字语音产业发展报告》显示&#xff0c;超过65%的创作者开始尝试使用方言内容来提升作品的亲切感与地域穿透力。然而&#xff0c…

作者头像 李华
网站建设 2026/5/22 21:00:49

JConsole 中 GC 时间统计的含义

要理解 JConsole 中 GC 时间统计的含义,需结合 垃圾收集器类型​ 和 统计维度​ 拆解: 1. 关于 PS MarkSweep 上的 12.575 秒 (16 收集) PS MarkSweep:是 JVM 中用于清理 老年代(PS Old Gen)​ 的垃圾收集器(属于 Full GC 收集器,触发时会暂停所有应用线程,即 STW)。…

作者头像 李华
网站建设 2026/5/23 5:45:10

自由职业与咨询:测试工程师的另一种活法

在数字经济的浪潮中&#xff0c;软件测试工程师的角色正从传统的全职雇佣模式&#xff0c;向更灵活的自由职业与咨询路径扩展。随着人工智能、云计算和敏捷开发的普及&#xff0c;测试行业对专业化、独立服务的需求日益增长。本文基于2025年的行业现状&#xff0c;探讨测试工程…

作者头像 李华
网站建设 2026/5/14 7:27:08

告别手动更新烦恼:Latest让你的macOS应用始终保持最新状态

告别手动更新烦恼&#xff1a;Latest让你的macOS应用始终保持最新状态 【免费下载链接】Latest A small utility app for macOS that makes sure you know about all the latest updates to the apps you use. 项目地址: https://gitcode.com/gh_mirrors/la/Latest 你是…

作者头像 李华
网站建设 2026/5/20 1:24:14

谈判技巧:在offer阶段如何为自己争取更好的薪酬包?

软件测试从业者的薪酬谈判机遇与挑战 在2025年底的软件测试行业中&#xff0c;随着人工智能和自动化测试工具的普及&#xff0c;企业对高素质测试人才的需求持续增长&#xff0c;这为从业者争取更优薪酬包创造了有利条件。然而&#xff0c;许多测试工程师在offer阶段因缺乏谈判…

作者头像 李华