Qt 顺序容器的详细介绍
一.顺序容器介绍
Qt 中的顺序容器包括 QVector、QList、QLinkedList 和 QStack。这些容器都提供了类似于 C++ STL 中的容器的功能,但是在 Qt 中提供了更多的功能和接口。
二.具体介绍
1.QVector
QVector:是一个动态数组,可以在其末尾快速插入和删除元素,也可以通过索引访问元素。与 std::vector 相似,但 QVector 还提供了许多额外的功能,例如在指定位置插入元素、在指定位置删除元素等。示例代码如下:
#include <QCoreApplication>
#include <QDebug>
#include <QVector>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建一个 QVector 对象QVector<int> vec;// 添加元素到 QVectorvec.append(1);vec.append(2);vec.append(3);// 访问和修改元素qDebug() << "Element at index 0: " << vec[0];qDebug() << "Element at index 1: " << vec.at(1);vec[1] = 4;// 删除元素vec.removeLast();// 输出 QVector 的大小和内容qDebug() << "Size of QVector: " << vec.size();qDebug() << "Contents of QVector:";for (int i = 0; i < vec.size(); ++i) {qDebug() << vec[i];}// 使用迭代器遍历 QVectorqDebug() << "Contents of QVector using iterator:";QVector<int>::const_iterator it;for (it = vec.constBegin(); it != vec.constEnd(); ++it) {qDebug() << *it;}return a.exec();
}
2.QList
QList:是一个双向链表,可以在其任意位置快速插入和删除元素。与 std::list 相似,但 QList 还提供了随机访问元素的功能。示例代码如下:
#include <QCoreApplication>
#include <QDebug>
#include <QList>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建一个 QList 对象QList<QString> list;// 添加元素到 QListlist.append("Apple");list.append("Banana");list.append("Cherry");// 访问和修改元素qDebug() << "Element at index 0: " << list[0];qDebug() << "Element at index 1: " << list.at(1);list[1] = "Blueberry";// 删除最后一个元素list.removeLast();// 输出 QList 的大小和内容qDebug() << "Size of QList: " << list.size();qDebug() << "Contents of QList:";for (int i = 0; i < list.size(); ++i) {qDebug() << list[i];}// 使用迭代器遍历 QListqDebug() << "Contents of QList using iterator:";QList<QString>::const_iterator it;for (it = list.constBegin(); it != list.constEnd(); ++it) {qDebug() << *it;}return a.exec();
}
3.QLinkedList
QLinkedList:是一个双向链表,与 QList 相似,但 QLinkedList 不支持随机访问元素,只能通过迭代器访问元素。示例代码如下:
#include <QCoreApplication>
#include <QDebug>
#include <QLinkedList>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建一个 QLinkedList 对象QLinkedList<int> linkedList;// 添加元素到 QLinkedListlinkedList.append(1);linkedList.append(2);linkedList.append(3);// 访问和修改元素qDebug() << "Element at front: " << linkedList.front();qDebug() << "Element at back: " << linkedList.back();// 删除第一个元素linkedList.removeFirst();// 输出 QLinkedList 的大小和内容qDebug() << "Size of QLinkedList: " << linkedList.size();qDebug() << "Contents of QLinkedList:";for (int value : linkedList) {qDebug() << value;}// 使用迭代器遍历 QLinkedListqDebug() << "Contents of QLinkedList using iterator:";QLinkedList<int>::const_iterator it;for (it = linkedList.constBegin(); it != linkedList.constEnd(); ++it) {qDebug() << *it;}return a.exec();
}
4. QStack
QStack:是一个栈,只能在栈顶插入和删除元素。与 std::stack 相似,但 QStack 还提供了许多额外的功能,例如获取栈顶元素、判断栈是否为空等。示例代码如下:
#include <QCoreApplication>
#include <QDebug>
#include <QStack>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建一个 QStack 对象QStack<QString> stack;// 入栈操作stack.push("Apple");stack.push("Banana");stack.push("Cherry");// 访问栈顶元素qDebug() << "Top element of the stack: " << stack.top();// 出栈操作stack.pop();// 输出栈的大小和内容qDebug() << "Size of the stack: " << stack.size();qDebug() << "Contents of the stack:";while (!stack.isEmpty()) {qDebug() << stack.pop();}return a.exec();
}
5.QQueue
QQueue 是 Qt 中的一个类,用于实现队列(queue)数据结构。队列是一种先进先出(FIFO)的数据结构,即最先进入队列的元素最先被取出。QQueue 提供了一组方法来实现队列的基本操作,如入队(enqueue)、出队(dequeue)、访问队首元素(head)、获取队列大小(size)等。
#include <QCoreApplication>
#include <QDebug>
#include <QQueue>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建一个 QQueue 对象QQueue<int> queue;// 入队操作queue.enqueue(1);queue.enqueue(2);queue.enqueue(3);// 访问队首元素qDebug() << "Front element of the queue: " << queue.head();// 出队操作queue.dequeue();// 输出队列的大小和内容qDebug() << "Size of the queue: " << queue.size();qDebug() << "Contents of the queue:";while (!queue.isEmpty()) {qDebug() << queue.dequeue();}return a.exec();
}
三.使用场景分析
在选择使用哪种顺序容器时,可以考虑以下几个因素来区分它们的使用场景:
数据访问方式:如果需要频繁地在容器的末尾插入和删除元素,并且需要随机访问元素,可以选择使用 QVector。如果需要在容器的任意位置快速插入和删除元素,并且需要随机访问元素,可以选择使用 QList。如果只需要在容器的任意位置快速插入和删除元素,但不需要随机访问元素,可以选择使用 QLinkedList。如果只需要在栈顶插入和删除元素,可以选择使用 QStack。
数据规模:如果需要存储大量数据并且需要频繁地进行插入和删除操作,可以选择使用 QList 或 QLinkedList,因为它们在插入和删除操作上效率更高。如果数据规模较小或者需要频繁地进行随机访问操作,可以选择使用 QVector。
接口和功能需求:根据具体的需求选择合适的容器,例如是否需要支持随机访问、是否需要支持栈操作等。QVector 提供了更多的功能和接口,可以更灵活地操作数据,而 QList 和 QLinkedList 则提供了更高效的插入和删除操作。
综上所述,根据数据访问方式、数据规模和接口功能需求来选择合适的顺序容器,可以更好地满足实际的使用场景
相关文章:

Qt 顺序容器的详细介绍
一.顺序容器介绍 Qt 中的顺序容器包括 QVector、QList、QLinkedList 和 QStack。这些容器都提供了类似于 C STL 中的容器的功能,但是在 Qt 中提供了更多的功能和接口。 二.具体介绍 1.QVector QVector:是一个动态数组,可以在其末尾快速插入…...

基于语音识别的智能电子病历(三)之 M*Modal
讨论“基于语音识别的智能电子病历”,就绕不开 Nuance 和 M*Modal。这2个公司长时间的占据第一和第二的位置。下面介绍一下M*Modal。 这是2019年的一个新闻“专业医疗软件提供商3M公司为自己购买了一份圣诞礼物,即M*Modal IP LLC的医疗技术业务…...

理解Apache Storm的实际用途和应用场景
学习目标: 理解Apache Storm的实际用途和应用场景 学习内容: 1. 实时数据处理和分析 1.1 实时日志分析 公司可以使用Storm来实时处理和分析服务器日志。例如,电商网站可以实时监控用户行为日志,以检测异常活动(如DD…...

【iceberg】数据湖与iceberg调研与实战
文章目录 一. 为什么现在要强调数据湖1. 大数据架构发展历史2. Lambda架构与kappa架构3. 数据湖所具备的能力 二. iceberg是数据湖吗1. iceberg的诞生2. iceberg设计之table format从如上iceberg的数据结构可以知道,iceberg在数据查询时,1.查找文件的时间…...

xrdp多用户多控制界面远程控制
1、无桌面安装桌面(原本有ubuntu桌面的可以直接跳过这一步) Gnome 与 xfce 相比,xfce 由于其轻巧,它可以安装在低端台式机上。Xfce 优雅的外观,增强了用户体验,它对用户非常友好,性能优于其他桌…...

git会忽略我们工作改动中的大小写
在我们日常git工作中,我们对于文件名字的大小写修改正常是不会被git记录的 这是因为默认情况下git是不区分大小写的 这会导致一个问题,由于我们修改了文件名字的大小写,而对于文件之间相互依赖的导入代码没有对应修改 如果我们此时本地推送…...

SSL 自定义证书创建过程
1、生成自签名根证书和私钥 1.1 生成根证书 1.1.1生成根证书私钥 首先,生成一个自签名的根证书和私钥。这个根证书将作为信任锚(Trust Anchor),客户端会信任由这个根证书签署的所有证书。 openssl genrsa -out rootCA.key 204…...

javaSwing飞机订票系统
摘要 Java swing实现的飞机票预定系统,系统数据库原本采用的是Oracle,我又改了一个mysql版本的,所以这套系统有两个版本,一个是mysql数据库版的,一个是Oracle数据库版 一. 已经完成的功能 : …...

赶紧收藏!2024 年最常见 20道 Redis面试题(四)
上一篇地址:赶紧收藏!2024 年最常见 20道 Redis面试题(三)-CSDN博客 七、Pipeline有什么好处,为什么要用pipeline? Redis Pipeline 是一种批量执行命令的技术,它允许客户端一次性发送多个命令…...

虚拟列表 vue-virtual-scroller 的使用
npm 详情:vue-virtual-scroller - npm (npmjs.com) 这里我使用的是RecycleScroller。 App.vue <template><RecycleScrollerclass"scroller":items"items":item-size"54"v-slot"{ item }"><list-item :it…...

前端基础入门三大核心之HTML篇:深入理解重绘与重排 —— 概念、区别与实战演练
前端基础入门三大核心之HTML篇:深入理解重绘与重排 —— 概念、区别与实战演练 HTML渲染基础回顾重绘与重排的概念重绘(Repaint)重排(Reflow) 区别与影响实战示例:优化策略与代码演示示例1:避免…...

【C/C++笔试练习】TCP、IP广播、ARP协议、IP路由器、MAC协议、三次握手、TCP/IP、子网划分年、会抽奖、抄送列表
文章目录 C/C笔试练习选择部分(1)TCP(2)IP广播(3)ARP协议(4)IP路由器(5)MAC协议(6)三次握手(7)TCP/IP…...

线程的概念和控制
文章目录 线程概念线程的优点线程的缺点线程异常线程用途理解虚拟地址 线程控制线程的创建线程终止线程等待线程分离封装线程库 线程概念 什么是线程? 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一…...

PHS树脂(聚对羟基苯乙烯)为KrF光刻胶专用树脂 本土企业具备百公斤级别量产能力
PHS树脂(聚对羟基苯乙烯)为KrF光刻胶专用树脂 本土企业具备百公斤级别量产能力 PHS树脂又称聚对羟基苯乙烯树脂、聚羟基苯乙烯树脂,指以对羟基苯乙烯作为基材制成的光刻胶树脂。与其他光刻胶树脂相比,PHS树脂具有极佳热稳定性、化…...

Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明
Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明 目录 Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明 一、简单介绍 二、单变量非线性变换 三、自…...

uniapp-自定义navigationBar
封装导航栏自定义组件 创建 nav-bar.vue <script setup>import {onReady} from dcloudio/uni-appimport {ref} from vue;const propsdefineProps([navBackgroundColor])const statusBarHeight ref()const navHeight ref()onReady(() > {uni.getSystemInfo({success…...

多式联运奇迹:探索 GPT-4o 的尖端功能
取得的显着进展的DigiOps与人工智能已经标志着重要的里程碑,随着时间的推移塑造了人工智能系统的能力。从早期基于规则系统的出现机器学习和深入学习,人工智能已经发展得更加先进和通用。 生成式预训练 Transformer (GPT) by OpenAI 已特别值得注意。每…...

前端 CSS 经典:好看的标题动画
前言:好看的标题动画实现。 效果: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><…...

Vue项目打包优化(element+echarts+vue使用cdn)
如何打包查看所有资源大小? 使用插件:webpack-bundle-analyzer 效果图: 安装webpack-bundle-analyzer 第一步,终端执行 npm instatll webpack-bundle-analyzer --save-dev第二步,vue.config.js配置 module.export…...

【ARM 嵌入式 C 入门及渐进 6.1 -- ARMv8 C 内嵌汇编写系统寄存器的函数实现】
请阅读【嵌入式开发学习必备专栏】 文章目录 ARMv8 C 内嵌汇编写系统寄存器 ARMv8 C 内嵌汇编写系统寄存器 在ARMv8架构下,使用C语言结合内嵌汇编实现将一个值写入特定系统寄存器的函数可以按照下面的方法进行。 下面这个示例展示了如何将一个uint64_t类型的值写入…...

ESP32基础应用之使用手机浏览器作为客户端与ESP32作为服务器进行通信
文章目录 1 准备2 移植2.1 softAP工程移植到simple工程中2.2 移植注意事项 3 验证 1 准备 参考工程 Espressif\frameworks\esp-idf-v5.2.1\examples\wifi\getting_started\softAP softAP工程演示将ESP32作为AP,即热点,使手机等终端可以连接参考工程 Esp…...

【课后练习分享】Java用户注册界面设计和求三角形面积的图形界面程序
目录 java编程题(每日一练): 问题一的答案代码如下: 问题一的运行截图如下: 问题二的答案代码如下: 问题二的运行截图如下: java编程题(每日一练): 1.…...

三维空间坐标系变换(旋转平移)
在探究三维空间下的变换前,首先研究二位空间,因为比较直观,再推广到三维空间。 首先应该清楚的一点是:旋转、平移对于坐标系下的点以及坐标系本身而言都是相对的(运动的相对性)。 例如: X O Y …...

OC笔记之foundation框架
OC学习笔记(三) 文章目录 OC学习笔记(三)常用Foundation框架结构体NSRangeNSRange结构体的定义定义 NSRange 的方法打印Range的相关信息NSRange的实际运用查找子字符串返回NSRange结构体 NSPointNSRect NSStringNSString的创建NSS…...

Docker部署springboot包并联通MySQL
Docker部署jar 实现功能 部署springboot下发布的jar包不同docker容器之间通信(如MySQL访问、Redis访问)多个jar包部署 参考文献 Just a moment… Just a moment… https://www.jb51.net/article/279449.htm springboot配置 这里使用多yaml配置文件&…...

多帧激光点云基于标定参数进行融合拼接
1、前言 在三维视觉技术蓬勃发展的今天,点云作为捕获和表示三维环境的基础数据形式,扮演着至关重要的角色。点云融合拼接技术,作为连接孤立点云片段、构建连续、全面三维场景的核心过程,对于自动驾驶、机器人导航、三维建模以及地…...

python数据类型之字符串
目录 1.字符串概念和注意事项 2.字符串内置函数 3.字符串的索引、切片和遍历 4.字符串运算符 5.字符串常用方法 性质判断 开头结尾判断 是否存在某个子串 大小写等格式转化 子串替换 删除两端空白字符 格式化字符串 分割与合并 6.字符串模板 7.exec 函数 8.字符…...

Vue3实战笔记(38)—粒子特效终章
文章目录 前言一、怎样使用官方提供的特效二、海葵特效总结 前言 官方还有很多漂亮的特效,但是vue3只有一个demo,例如我前面实现的两个页面就耗费了一些时间,今天记录一下tsparticles官方内置的几个特效的使用方法,一般这几个就足…...

晶体振荡器
一、晶振与晶体区别 晶振是有源晶振的简称,又叫振荡器,英文名称是oscillator,内部有时钟电路,只需供电便可产生振荡信号;晶体是无源晶振的简称,也叫谐振器,英文名称是crystal,是无极…...

单词可交互的弧形文本
在一个项目中,要求把少儿读本做成电子教材呈现出来,电子书的排版要求跟纸质书一致。其中,英语书有个需求:书中有些不规则排版的文本(如下图所示),当随书音频播放时,被读到的文本要求…...