【Qt】常用的容器
Qt提供了多个基于模板的容器类,这些容器类可用于存储指定类型的数据项。例如常用的字符串列表类 QStringList 可用来操作一个 QList<QString>列表。
Qt的容器类比标准模板库(standard template library,STL)中的容器类更轻巧、使用更安全且更易于使用。这些容器类是隐式共享和可重入的,而且它们进行了速度和存储上的优化,因而可以减小可执行文件大小。此外,它们是线程安全的,即它们作为只读容器时可被多个线程访问。
容器类是基于模板的类,例如常用的容器类 QList<T>,T是一种具体的类型,可以是 int、fioat等简单类型,也可以是 QString、QDate 等类。T必须是一种可赋值的类型,即T必须提供一个默
认的构造函数、一个可复制构造函数和一个赋值运算符。Qt6 的容器类有 QList、QVector、QStack 、QQueue、 QSet、QMap、QMultilMap、QHash、QMultiHash
一、QList
在Qt中,QList是一个模板类,用于存储一组对象的动态数组。它提供了方便的方法来访问、增加、删除和修改列表中的元素。
QList与C++的标准库容器std::vector类似,但它还提供了一些额外的功能和方便的操作符重载。下面是一些QList的常用操作:
- 添加元素:使用append()、prepend()等方法将元素添加到列表的末尾或开头。
- 访问元素:使用at()方法通过索引访问列表中的元素,使用operator[]操作符也可以实现相同的功能。
- 删除元素:使用removeOne()、removeAt()等方法删除列表中的元素。
- 修改元素:使用replace()方法替换列表中的元素。
- 列表大小:使用size()方法获取列表的大小,使用isEmpty()方法检查列表是否为空。
- 迭代访问:使用foreach循环或迭代器对列表进行迭代访问。
除了这些常用方法外,QList还提供了一些其他的功能,如排序、查找、截取子列表等。可以在Qt的官方文档中查看完整的QList类接口和用法。
注意:在使用QList时,需要包含头文件#include <QList>。
二、QVector
在Qt中,QVector是一个模板类,用于存储一组对象的可变大小的数组。它与QList相似,但在某些方面具有不同的特性和性能特点。
与QList相比,QVector在以下情况下可能更适合使用:
1. 读取和访问速度:QVector提供了随机访问的性能优势。如果需要频繁地通过索引访问元素,QVector通常比QList更快。
2. 内存占用:QVector的内存占用通常比QList小,因为它可以更有效地管理和分配内存。
3. 插入和删除操作:对于插入和删除操作,QList通常比QVector更快,尤其在大型数据集的情况下。
除了上述的区别,QVector和QList提供了类似的方法和操作符重载,如append()、prepend()、at()、removeOne()、replace()、size()等等。可以在Qt的官方文档中查看完整的QVector类接口和用法。
注意:在使用QVector时,需要包含头文件#include <QVector>。
三、QStack
QStack是Qt中的一个模板类,它是一个栈容器类,用于实现栈数据结构。
栈(Stack)是一种后进先出(Last-In-First-Out, LIFO)的数据结构,只能在栈的一端(称为栈顶)进行插入和删除操作。
QStack类提供了以下公共成员函数:
- void push(const T &value):将value插入到栈的顶部。
- void pop():移除栈顶的元素。
- T &top():返回栈顶的元素的引用。
- const T &top() const:返回栈顶的元素的常量引用。
- bool isEmpty() const:判断栈是否为空。
- int size() const:返回栈中元素的个数。
QStack类可以存储任意类型的数据,并且提供了访问、插入和删除元素的方法。可以使用QStack类来实现各种栈相关的操作。
四、QQueue
QQueue是Qt中的一个类,用于表示队列数据结构。队列是一种先进先出(First In First Out,FIFO)的数据结构,元素从队列的一端添加,从另一端删除。
QQueue类提供了以下方法来操作队列:
- enqueue:在队列的末尾添加一个元素。
- dequeue:删除队列的头部元素,并返回该元素。
- head:返回队列的头部元素,但不删除它。
- isEmpty:判断队列是否为空。
- size:返回队列中元素的个数。
使用QQueue类,可以方便地实现队列的操作。例如,在一个多线程程序中,可以使用QQueue来作为线程之间共享的数据结构,一个线程往队列中添加数据,另一个线程从队列中取出数据进行处理。
五、 QSet
QSet是Qt中的一个类,用于表示集合数据结构。集合是一种不包含重复元素的数据结构,它提供了高效的查找和插入操作。
QSet类提供了以下方法来操作集合:
- insert:向集合中插入一个元素。
- remove:从集合中删除一个元素。
- contains:判断集合中是否包含某个元素。
- size:返回集合中元素的个数。
QSet类还提供了遍历集合元素的方法,如使用迭代器进行迭代或使用foreach循环
六、QMap
QMap是Qt中的一个类,用于存储键值对的容器。QMap类中的每个元素都是由一个键和一个值组成的。键用于唯一标识一个元素,而值则是与该键关联的数据。QMap中的元素按照键的排序进行存储,并且可以根据键快速地访问到对应的值。这使得QMap非常适用于需要根据键值进行查找、插入和删除操作的场景。QMap类提供了一系列方法来操作存储在其中的键值对,比如插入、移除、查找和遍历等方法。以下是QMap类的一些常用方法:
- insert(key, value):在QMap中插入一个键值对,如果键已经存在,则会更新对应的值。
- remove(key):从QMap中移除一个指定键的元素。
- contains(key):判断QMap中是否包含指定的键。
- value(key):返回指定键对应的值。
- keys():返回QMap中所有的键。
- values():返回QMap中所有的值。
- size():返回QMap中键值对的个数。
- clear():移除QMap中的所有元素。
QMap还提供了一些其他的功能,比如按范围查找、排序等。需要注意的是,QMap中的键是唯一的,不允许出现重复的键。如果插入了重复的键,则会替换掉之前的键值对。使用QMap时,需要注意元素的排序和查找的效率。如果需要按照键的顺序进行访问,可以使用QMap的有序版本QMap。QMap类是基于红黑树实现的,因此它的插入、删除和查找操作的时间复杂度为O(log n),其中n是QMap中元素的个数。
注意:使用QMap类需要包含头文件#include <QMap>。
七、QMultilMap
QMultiMap是Qt中的一个类,它是QMap的多重映射版本。QMultiMap类与QMap类一样,同时存储了键值对,但与QMap不同的是,QMultiMap允许存在相同的键,即一个键可以对应多个值。QMultiMap类提供了一系列方法来操作多重映射中的键值对,包括插入、移除、查找和遍历等操作。与QMap类相似,QMultiMap类也按照键的排序进行存储,并且可以通过键快速访问到对应的值。对于相同的键,QMultiMap会按照插入的顺序保存多个值。以下是QMultiMap类的一些常用方法:
- insert(key, value):在QMultiMap中插入一个键值对。
- remove(key):从QMultiMap中移除一个指定键的所有元素。
- remove(key, value):从QMultiMap中移除一个指定键值对。
- values(key):返回指定键对应的所有值。
- contains(key):判断QMultiMap中是否包含指定的键。
- keys():返回QMultiMap中所有的键。
- size():返回QMultiMap中键值对的个数。
- clear():移除QMultiMap中的所有元素。
QMultiMap也提供了按范围查找、排序等功能。使用QMultiMap时,可以很方便地处理一个键对应多个值的情况,比如用于处理消息订阅、事件处理等场景。 需要注意的是,QMultiMap中的键可以重复,但是如果插入了相同的键值对,则会保存多个值,而不会替换掉之前的值。QMultiMap类也是基于红黑树实现的,因此插入、删除和查找操作的时间复杂度为O(log n),其中n是QMultiMap中元素的个数。
八、QHash
QHash是Qt中的一个类,用于实现哈希表(Hash Table)数据结构。QHash类类似于C++ STL中的std::unordered_map,它提供了一种以键值对的方式存储和访问数据的方法。与QMap类不同的是,QHash并不会对其元素进行排序,而是通过哈希函数将键转化为索引,并通过索引直接访问元素,从而实现了快速查找和插入。QHash类提供了一系列方法来操作哈希表中的元素,包括插入、移除、查找和遍历等操作,以下是QHash类的一些常用方法:
- insert(key, value):在QHash中插入一个键值对。
- remove(key):从QHash中移除一个指定键的元素。
- value(key):返回指定键对应的值。
- contains(key):判断QHash中是否包含指定的键。
- keys():返回QHash中所有的键。
- values():返回QHash中所有的值。
- size():返回QHash中键值对的个数。
- clear():移除QHash中的所有元素。
QHash的底层实现使用了哈希表技术,通过哈希函数将键转换为索引,并使用链地址法解决哈希冲突。因此,对于大多数操作,QHash的时间复杂度为O(1)。值得注意的是,QHash对键的顺序并不做保证,即无法保证键的插入顺序和遍历顺序是一致的。QHash类还提供了与STL兼容的迭代器,可以使用迭代器来遍历QHash中的元素。使用QHash时,需要保证键类型是可哈希的(即提供了哈希函数),并支持比较操作符。QHash在很多场景中都是非常有用的,比如用于快速查找和存储大量的键值对,或者用于实现缓存、索引结构等。
相关文章:
【Qt】常用的容器
Qt提供了多个基于模板的容器类,这些容器类可用于存储指定类型的数据项。例如常用的字符串列表类 QStringList 可用来操作一个 QList<QString>列表。 Qt的容器类比标准模板库(standard template library,STL)中的容器类更轻巧、使用更安全且更易于使…...

基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 .…...

分布式事务组件Seata简介与使用,搭配Nacos统一管理服务端和客户端配置
文章目录 一. Seata简介二. 官方文档三. Seata分布式事务代码实现0. 环境简介1. 添加undo_log表2. 添加依赖3. 添加配置4. 开启Seata事务管理5. 启动演示 四. Seata Server配置Nacos1. 修改配置类型2. 创建Nacos配置 五. Seata Client配置Nacos1. 增加Seata关联Nacos的配置2. 在…...
JavaScript常用的内置构造函数
JavaScript作为一种广泛应用的编程语言,提供了丰富的内置构造函数,帮助开发者处理不同类型的数据和操作。这些内置构造函数在创建和操作对象时非常有用。本文将详细介绍JavaScript中常用的内置构造函数及其用途。 常用内置构造函数概述 1. Object Obj…...

25寒假算法刷题 | Day1 | LeetCode 240. 搜索二维矩阵 II,148. 排序链表
目录 240. 搜索二维矩阵 II题目描述题解 148. 排序链表题目描述题解 240. 搜索二维矩阵 II 点此跳转题目链接 题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到…...

MQTT知识
MQTT协议 MQTT 是一种基于发布/订阅模式的轻量级消息传输协议,专门针对低带宽和不稳定网络环境的物联网应用而设计,可以用极少的代码为联网设备提供实时可靠的消息服务。MQTT 协议广泛应用于物联网、移动互联网、智能硬件、车联网、智慧城市、远程医疗、…...

【机器学习与数据挖掘实战】案例11:基于灰色预测和SVR的企业所得税预测分析
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联…...

新一代搜索引擎,是 ES 的15倍?
Manticore Search介绍 Manticore Search 是一个使用 C 开发的高性能搜索引擎,创建于 2017 年,其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx,显着改进了它的功能,修复了数百个错误,几乎完全重写了代码…...
使用 Context API 管理临时状态,避免 Redux/Zustand 的持久化陷阱
在开发 React Native 应用时,我们经常需要管理全局状态,比如用户信息、主题设置、网络状态等。而对于某些临时状态,例如 数据同步进行中的状态 (isSyncing),我们应该选择什么方式来管理它? 在项目开发过程中ÿ…...

PyTorch框架——基于深度学习YOLOv8神经网络学生课堂行为检测识别系统
基于YOLOv8深度学习的学生课堂行为检测识别系统,其能识别三种学生课堂行为:names: [举手, 读书, 写字] 具体图片见如下: 第一步:YOLOv8介绍 YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本…...

word2vec 实战应用介绍
Word2Vec 是一种由 Google 在 2013 年推出的重要词嵌入模型,通过将单词映射为低维向量,实现了对自然语言处理任务的高效支持。其核心思想是利用深度学习技术,通过训练大量文本数据,将单词表示为稠密的向量形式,从而捕捉单词之间的语义和语法关系。以下是关于 Word2Vec 实战…...
C# 操作符重载对象详解
.NET学习资料 .NET学习资料 .NET学习资料 一、操作符重载的概念 在 C# 中,操作符重载允许我们为自定义的类或结构体定义操作符的行为。通常,我们熟悉的操作符,如加法()、减法(-)、乘法&#…...

python学opencv|读取图像(五十四)使用cv2.blur()函数实现图像像素均值处理
【1】引言 前序学习进程中,对图像的操作均基于各个像素点上的BGR值不同而展开。 对于彩色图像,每个像素点上的BGR值为三个整数,因为是三通道图像;对于灰度图像,各个像素上的BGR值是一个整数,因为这是单通…...
CNN的各种知识点(四): 非极大值抑制(Non-Maximum Suppression, NMS)
非极大值抑制(Non-Maximum Suppression, NMS) 1. 非极大值抑制(Non-Maximum Suppression, NMS)概念:算法步骤:具体例子:PyTorch实现: 总结: 1. 非极大值抑制(…...
虚幻基础16:locomotion direction
locomotion locomotion:角色运动系统的总称:包含移动、奔跑、跳跃、转向等。 locomotion direction 玩家输入 玩家输入:通常代表玩家想要的移动方向。 direction 可以计算当前朝向与移动方向的Δ。从而实现朝向与移动(玩家输入)方向的分…...

C++游戏开发实战:从引擎架构到物理碰撞
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 C 是游戏开发中最受欢迎的编程语言之一,因其高性能、低延迟和强大的底层控制能力,被广泛用于游戏…...

代理模式——C++实现
目录 1. 代理模式简介 2. 代码示例 1. 代理模式简介 代理模式是一种行为型模式。 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制该对象的访问。这时,访问对象不适合或者不能直接访问引用目标对象,代理对象作为访问对象和目标…...
什么情况下,C#需要手动进行资源分配和释放?什么又是非托管资源?
扩展:如何使用C#的using语句释放资源?什么是IDisposable接口?与垃圾回收有什么关系?-CSDN博客 托管资源的回收有GC自动触发,而非托管资源需要手动释放。 在 C# 中,非托管资源是指那些不由 CLR(…...
LeetCode 2909. 元素和最小的山形三元组 II
**### LeetCode 2909. 元素和最小的山形三元组 II 问题描述 给定一个下标从 0 开始的整数数组 nums,我们需要找到一个“山形三元组”(i, j, k)满足以下条件: i < j < knums[i] < nums[j] 且 nums[k] < nums[j] 并…...
搬迁至bilibili声明
我将搬迁到bilibili ,用户名:北苏清风 在这个用户名上的文章部分将出自csdn的这个账号,均属于本人原创...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...