当前位置: 首页 > news >正文

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();
}

 三.使用场景分析

在选择使用哪种顺序容器时,可以考虑以下几个因素来区分它们的使用场景:

  1. 数据访问方式:如果需要频繁地在容器的末尾插入和删除元素,并且需要随机访问元素,可以选择使用 QVector。如果需要在容器的任意位置快速插入和删除元素,并且需要随机访问元素,可以选择使用 QList。如果只需要在容器的任意位置快速插入和删除元素,但不需要随机访问元素,可以选择使用 QLinkedList。如果只需要在栈顶插入和删除元素,可以选择使用 QStack。

  2. 数据规模:如果需要存储大量数据并且需要频繁地进行插入和删除操作,可以选择使用 QList 或 QLinkedList,因为它们在插入和删除操作上效率更高。如果数据规模较小或者需要频繁地进行随机访问操作,可以选择使用 QVector。

  3. 接口和功能需求:根据具体的需求选择合适的容器,例如是否需要支持随机访问、是否需要支持栈操作等。QVector 提供了更多的功能和接口,可以更灵活地操作数据,而 QList 和 QLinkedList 则提供了更高效的插入和删除操作。

综上所述,根据数据访问方式、数据规模和接口功能需求来选择合适的顺序容器,可以更好地满足实际的使用场景

相关文章:

Qt 顺序容器的详细介绍

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

基于语音识别的智能电子病历(三)之 M*Modal

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

理解Apache Storm的实际用途和应用场景

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

【iceberg】数据湖与iceberg调研与实战

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

xrdp多用户多控制界面远程控制

1、无桌面安装桌面&#xff08;原本有ubuntu桌面的可以直接跳过这一步&#xff09; Gnome 与 xfce 相比&#xff0c;xfce 由于其轻巧&#xff0c;它可以安装在低端台式机上。Xfce 优雅的外观&#xff0c;增强了用户体验&#xff0c;它对用户非常友好&#xff0c;性能优于其他桌…...

git会忽略我们工作改动中的大小写

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

SSL 自定义证书创建过程

1、生成自签名根证书和私钥 1.1 生成根证书 1.1.1生成根证书私钥 首先&#xff0c;生成一个自签名的根证书和私钥。这个根证书将作为信任锚&#xff08;Trust Anchor&#xff09;&#xff0c;客户端会信任由这个根证书签署的所有证书。 openssl genrsa -out rootCA.key 204…...

javaSwing飞机订票系统

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

赶紧收藏!2024 年最常见 20道 Redis面试题(四)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 20道 Redis面试题&#xff08;三&#xff09;-CSDN博客 七、Pipeline有什么好处&#xff0c;为什么要用pipeline&#xff1f; Redis Pipeline 是一种批量执行命令的技术&#xff0c;它允许客户端一次性发送多个命令…...

虚拟列表 vue-virtual-scroller 的使用

npm 详情&#xff1a;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篇&#xff1a;深入理解重绘与重排 —— 概念、区别与实战演练 HTML渲染基础回顾重绘与重排的概念重绘&#xff08;Repaint&#xff09;重排&#xff08;Reflow&#xff09; 区别与影响实战示例&#xff1a;优化策略与代码演示示例1&#xff1a;避免…...

【C/C++笔试练习】TCP、IP广播、ARP协议、IP路由器、MAC协议、三次握手、TCP/IP、子网划分年、会抽奖、抄送列表

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;TCP&#xff08;2&#xff09;IP广播&#xff08;3&#xff09;ARP协议&#xff08;4&#xff09;IP路由器&#xff08;5&#xff09;MAC协议&#xff08;6&#xff09;三次握手&#xff08;7&#xff09;TCP/IP&#xf…...

线程的概念和控制

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

PHS树脂(聚对羟基苯乙烯)为KrF光刻胶专用树脂 本土企业具备百公斤级别量产能力

PHS树脂&#xff08;聚对羟基苯乙烯&#xff09;为KrF光刻胶专用树脂 本土企业具备百公斤级别量产能力 PHS树脂又称聚对羟基苯乙烯树脂、聚羟基苯乙烯树脂&#xff0c;指以对羟基苯乙烯作为基材制成的光刻胶树脂。与其他光刻胶树脂相比&#xff0c;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与人工智能已经标志着重要的里程碑&#xff0c;随着时间的推移塑造了人工智能系统的能力。从早期基于规则系统的出现机器学习和深入学习&#xff0c;人工智能已经发展得更加先进和通用。 生成式预训练 Transformer (GPT) by OpenAI 已特别值得注意。每…...

前端 CSS 经典:好看的标题动画

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

Vue项目打包优化(element+echarts+vue使用cdn)

如何打包查看所有资源大小&#xff1f; 使用插件&#xff1a;webpack-bundle-analyzer 效果图&#xff1a; 安装webpack-bundle-analyzer 第一步&#xff0c;终端执行 npm instatll webpack-bundle-analyzer --save-dev第二步&#xff0c;vue.config.js配置 module.export…...

【ARM 嵌入式 C 入门及渐进 6.1 -- ARMv8 C 内嵌汇编写系统寄存器的函数实现】

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

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...