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类型的值写入…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...