#序列容器
QVector的原理QVector是 Qt 框架提供的动态数组容器功能类似于 C 标准库的std::vector但和 Qt 生态的其他类如QString、QVariant兼容性更好还提供了一些 Qt 专属的便捷接口。底层存储结构QVector使用动态数组来存储数据。动态数组的一个特点是元素存储在连续的内存位置上可以通过索引高效访问数据内存管理QVector会根据需要动态调整其容量。当容器需要扩展时会分配一个新的内存块将旧数据复制到新的位置然后释放旧内存。这种扩展通常是按倍数增长的以减少多次扩展的开销拷贝与移动在C11之后QVector支持移动语义和拷贝构造允许对象在容器间传递时减少不必要的内存拷贝元素类型存储QVector中的元素类型通常是指针类型或在栈上分配的类型如int,doubles等。对于复杂类型QVector会使用构造函数和析构函数来管理元素的创建和销毁#include QCoreApplication #include QVector #include QDebug int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 1. 初始化 QVector多种方式 // 方式1空容器后续添加元素 QVectorint vec1; // 方式2初始化时指定大小和默认值创建5个元素每个元素值为0 QVectorint vec2(5); // 方式3初始化时指定大小和自定义默认值创建5个元素每个元素值为10 QVectorint vec3(5, 10); // 方式4C11 初始化列表推荐简洁直观 QVectorQString vec4 {Apple, Banana, Orange}; // 2. 添加元素常用 // 尾部添加高效时间复杂度 O(1)扩容时除外 vec1.append(1); vec1.append(2); vec1.append(3); // 尾部添加的简写等价于 append vec1 4 5; // 头部添加低效时间复杂度 O(n)需要移动所有元素 vec1.prepend(0); // 指定索引位置插入元素索引从0开始同样需要移动后续元素 vec1.insert(3, 99); // 在索引3的位置插入99原元素后移 // 3. 访问元素两种方式 qDebug() 访问元素 ; // 方式1[] 运算符快速访问无越界检查越界会导致未定义行为 qDebug() 索引0的元素 vec1[0]; // 方式2at() 方法推荐有越界检查越界会抛出警告并返回默认值更安全 qDebug() 索引3的元素 vec1.at(3); // 访问首尾元素便捷接口 qDebug() 第一个元素 vec1.first(); qDebug() 最后一个元素 vec1.last(); // 4. 修改元素 qDebug() 修改元素 ; vec1[3] 88; // 用[] 修改 vec1.replace(4, 77); // 用replace() 方法修改等价于[]有越界检查 qDebug() 修改后索引3 vec1.at(3) 索引4 vec1.at(4); // 5. 删除元素 qDebug() 删除元素 ; // 删除指定索引的元素 vec1.removeAt(3); // 删除首尾元素 vec1.removeFirst(); vec1.removeLast(); // 删除所有值为某个特定值的元素 vec1.removeAll(77); // 清空所有元素容器大小变为0内存可选择保留或释放 // vec1.clear(); // 清空元素保留内存空间便于后续快速添加 // vec1.squeeze(); // 释放多余的内存空间仅保留当前元素所需内存 // 6. 常用查询操作 qDebug() 查询信息 ; qDebug() 容器大小元素个数 vec1.size(); qDebug() 是否为空 vec1.isEmpty(); qDebug() 是否包含元素2 vec1.contains(2); qDebug() 元素2第一次出现的索引 vec1.indexOf(2); qDebug() 元素2最后一次出现的索引 vec1.lastIndexOf(2); qDebug() 元素2的出现次数 vec1.count(2); // 7. 遍历 QVector三种常用方式 qDebug() 遍历容器 ; // 方式1普通for循环通过索引 qDebug() 普通for循环; for (int i 0; i vec1.size(); i) { qDebug() vec1.at(i); } // 方式2foreach 循环Qt 专属简洁直观只读遍历推荐 qDebug() foreach 循环; foreach (int val, vec1) { qDebug() val; } // 方式3C11 范围for循环推荐现代C 风格简洁高效 qDebug() 范围for循环; for (int val : vec1) { qDebug() val; } return a.exec(); }QList的原理QList 是 Qt 框架中最常用、最便捷的通用动态容器它的设计目标是兼顾多种场景的效率在 Qt 开发中出现的频率远高于 QVector尤其是界面开发、信号槽传参场景。动态数组内存分配QLSt使用动态内存分配来存储元素。内部使用一个指向数据的指针来管理内存QLst允许预先分配一定数量的空间当QLst需要存储更多元素时它会根据当前的分配内存大小动态增长数据存储QLst使用一个连续的内存块来存储元素。每个元素在内存中是连续排列的这使得随机访问操作非常高效时间复杂度为0(1)引用计数QList使用引用计数来管理内存。每个QList对象内部都、有一个引用计数器用于跟踪有多少个QLst对象共享同一块内存。当引用计数为零时内存会被自动释放。这种机制减少了内存泄漏的风险并提高了内存使用效率QStackQStack是 Qt 对栈数据结构的封装核心特性先进后出LIFO, Last In First Out就像你往一个空盒子里放书本最后放进去的书本最先被拿出来最开始放进去的书本只能最后被关键操作只有两个核心操作是高效的其他操作如访问中间元素不被推荐效率低入栈Push往栈的 ** 顶部栈顶** 添加元素相当于往盒子里放新书。】出栈Pop从栈的 ** 顶部栈顶** 移除并返回元素相当于从盒子里拿最上面的书。查看栈顶Top仅获取栈顶元素不移除它。#include QCoreApplication #include QStack #include QDebug int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 1. 初始化 QStack模板类指定存储元素类型 QStackint stack; // 2. 核心操作入栈push() qDebug() 入栈操作 ; stack.push(10); // 栈底10 stack.push(20); // 栈中10 - 20 stack.push(30); // 栈顶30当前栈10, 20, 30 stack.push(40); // 栈顶更新40当前栈10, 20, 30, 40 qDebug() 入栈后栈的大小 stack.size(); qDebug() 当前栈顶元素 stack.top(); // 查看栈顶输出 40 // 3. 核心操作出栈pop() qDebug() 出栈操作 ; stack.pop(); // 移除栈顶 40当前栈10, 20, 30 qDebug() 第一次出栈后栈顶 stack.top(); // 输出 30 stack.pop(); // 移除栈顶 30当前栈10, 20 qDebug() 第二次出栈后栈顶 stack.top(); // 输出 20 qDebug() 出栈后栈的大小 stack.size(); // 4. 辅助操作判断栈空、清空栈 qDebug() 辅助操作 ; qDebug() 当前栈是否为空 stack.isEmpty(); // 输出 false // 清空栈底层调用 QVector::clear() stack.clear(); qDebug() 清空后栈是否为空 stack.isEmpty(); // 输出 true // 注意栈为空时调用 top() 会返回元素类型的默认值int 为 0并抛出警告 // qDebug() stack.top(); // 不推荐空栈访问栈顶无意义 return a.exec(); }QQueue的原理QQueue是 Qt 对队列这种数据结构的封装#include QCoreApplication #include QQueue #include QDebug int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 1. 初始化 QQueue模板类指定存储元素类型 QQueueQString queue; // 2. 核心操作入队enqueue() qDebug() 入队操作 ; queue.enqueue(任务1打印文档); // 队首任务1 queue.enqueue(任务2下载文件); // 队列中间任务1 - 任务2 queue.enqueue(任务3发送邮件); // 队尾任务3当前队列任务1 → 任务2 → 任务3 queue.enqueue(任务4清理缓存); // 队尾更新任务4当前队列任务1 → 任务2 → 任务3 → 任务4 qDebug() 入队后队列大小 queue.size(); qDebug() 当前队首元素 queue.head(); // 查看队首输出 任务1打印文档 // 3. 核心操作出队dequeue() qDebug() 出队操作 ; // 出队移除并返回队首元素 QString task1 queue.dequeue(); qDebug() 完成的任务 task1; // 输出 任务1打印文档 qDebug() 第一次出队后队首 queue.head(); // 输出 任务2下载文件 QString task2 queue.dequeue(); qDebug() 完成的任务 task2; // 输出 任务2下载文件 qDebug() 第二次出队后队首 queue.head(); // 输出 任务3发送邮件 qDebug() 出队后队列大小 queue.size(); // 4. 辅助操作判断队列空、清空队列 qDebug() 辅助操作 ; qDebug() 当前队列是否为空 queue.isEmpty(); // 输出 false // 清空队列底层调用 QList::clear() queue.clear(); qDebug() 清空后队列是否为空 queue.isEmpty(); // 输出 true // 注意队列为空时调用 head() 会返回元素类型的默认值QString 为空字符串并抛出警告 // 调用 dequeue() 会返回默认值无其他操作均不推荐 // qDebug() queue.head(); // qDebug() queue.dequeue(); return a.exec(); }

相关新闻

DirectX详细图文安装教程(包含安装包),DirectX安装步骤,DirectX修复工具增强版

DirectX详细图文安装教程(包含安装包),DirectX安装步骤,DirectX修复工具增强版

当您的电脑在运行游戏或图形软件时出现错误,很可能是 DirectX组件出了状况。DirectX Repair修复工具优化增强版 V4.4能帮您轻松搞定这些问题。 DirectX修复工具是一款专门用于修复DirectX相关问题的系统级工具,能够自动检测并修复缺失或损坏的DirectX组…

2026/7/5 4:25:43 阅读更多 →
Qt常用控件指南(7)

Qt常用控件指南(7)

Qt常用控件深度解析与实战应用:从时间处理到交互逻辑 在图形用户界面(GUI)开发中,控件(Widgets)不仅是构建界面的基石,更是用户与应用程序进行交互的桥梁。Qt框架提供了极其丰富且功能强大的控…

2026/7/5 2:19:15 阅读更多 →
医院药品管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

医院药品管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

摘要 随着医疗行业的快速发展,医院药品管理的信息化需求日益增长。传统的人工管理模式存在效率低、易出错、数据难以追溯等问题,亟需通过信息化手段提升药品管理的精准性和安全性。药品管理系统能够实现药品的采购、库存、销售及处方管理的全流程数字化…

2026/7/4 15:53:17 阅读更多 →

最新新闻

接口自动化测试项目框架详解

接口自动化测试项目框架详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 在选择接口测试自动化框架时,需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说,使用Python相关的测试框架更为便捷。无论选…

2026/7/5 4:25:15 阅读更多 →
单片机IWIP 原子云实验

单片机IWIP 原子云实验

单片机 :STM32F407 开发板:DMF407电机开发板 平台:keil V5.31HSE 为8MHZ HSI为16MHZ主函数int main(void) {HAL_Init(); /* 初始化HAL库 */sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */delay_init…

2026/7/5 4:25:15 阅读更多 →
Nano Banana部署Gemini 2.5 Flash:ARM+NPU边缘多模态推理实战指南

Nano Banana部署Gemini 2.5 Flash:ARM+NPU边缘多模态推理实战指南

1. 项目概述:这不是一个“升级包”,而是一套可落地的嵌入式AI推理工作流 你手头有一块 Nano Banana 开发板——它不是树莓派,也不是 Jetson Nano,而是基于全志 H616 芯片、带双千兆网口、4GB LPDDR4、支持 PCIe 2.0 x1 的国产小钢…

2026/7/5 4:23:15 阅读更多 →
3分钟掌握Crontab UI:告别命令行恐惧的Linux定时任务可视化管理神器

3分钟掌握Crontab UI:告别命令行恐惧的Linux定时任务可视化管理神器

3分钟掌握Crontab UI:告别命令行恐惧的Linux定时任务可视化管理神器 【免费下载链接】crontab-ui Easy and safe way to manage your crontab file 项目地址: https://gitcode.com/gh_mirrors/cr/crontab-ui 还在为复杂的crontab语法而烦恼吗?Cro…

2026/7/5 4:19:14 阅读更多 →
如何专业测试显示器刷新率:5种方法验证VRR功能的终极指南

如何专业测试显示器刷新率:5种方法验证VRR功能的终极指南

如何专业测试显示器刷新率:5种方法验证VRR功能的终极指南 【免费下载链接】VRRTest A small utility I wrote to test variable refresh rate on Linux. Should work on all major OSes. 项目地址: https://gitcode.com/gh_mirrors/vr/VRRTest 显示器可变刷新…

2026/7/5 4:19:14 阅读更多 →
5个步骤搭建免费动作捕捉系统:FreeMoCap完全指南

5个步骤搭建免费动作捕捉系统:FreeMoCap完全指南

5个步骤搭建免费动作捕捉系统:FreeMoCap完全指南 【免费下载链接】freemocap Free Motion Capture for Everyone 💀✨ 项目地址: https://gitcode.com/GitHub_Trending/fr/freemocap FreeMoCap是一个免费开源的动作捕捉系统,为所有人提…

2026/7/5 4:17:14 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻