Qt容器类汇总说明

QList中QPair类型排序(C++ list排序pair) QList对于QPair排序 阅读详情
 

下述说明来源于官方文档

介绍

Qt库提供了一组通用的基于模板的容器类。这些类可用于存储指定类型的项。例如,如果你需要一个可调整大小的数组qstrings,使用QVector <QString>。

这些容器类的设计要比STL容器更轻、更安全、更容易使用。如果您不熟悉STL,或者更喜欢做“qt方式”,您可以使用这些类而不是STL类。

Qt还提供了一个foreach关键字,让它来遍历所有的物品存放在一个容器很容易。

qt提供的foreach在c++标准中并没有,在c++11中提供了类似于for(auto t:container)方式遍历容器,此方式qt也支持,个人感觉使用for更好

……更多介绍看官网

本博客的Qt容器使用说明

QMap、QMultiMap、QHash、QMultiHash、QQueue、QStack、

容器类

Qt提供了下列顺序容器:QList,QLinkedList,QVector,QStack,和QQueue。对于大多数应用程序,QList是使用最好的类型。虽然它底层用数组链表实现,但提供了非常快速的前后追加函数。如果你真的需要一个链表,用QLinkedList;如果你想让你的项目占用连续的内存位置,使用QVector。QStack 和QQueue提供了先进先出(LIFO ),先结后出(FIFO )。

Qt也提供了关联式容器:QMap,QMultiMap,QHash,QMultiHash,和QSet。Multi容器支持多个value关联到单一的key。Hash容器提供了通过hash函数快速查找取代二分查找。

特殊情况下,QCache和QContiguousCache提供了在有限的cache中高效的查找对象。

ClassSummary
QList<T>This is by far the most commonly used container class. It stores a list of values of a given type (T) that can be accessed by index. Internally, the QList is implemented using an array, ensuring that index-based access is very fast.Items can be added at either end of the list using QList::append() and QList::prepend(), or they can be inserted in the middle using QList::insert(). More than any other container class, QList is highly optimized to expand to as little code as possible in the executable. QStringList inherits from QList<QString>.
QLinkedList<T>This is similar to QList, except that it uses iterators rather than integer indexes to access items. It also provides better performance than QList when inserting in the middle of a huge list, and it has nicer iterator semantics. (Iterators pointing to an item in a QLinkedList remain valid as long as the item exists, whereas iterators to a QList can become invalid after any insertion or removal.)
QVector<T>This stores an array of values of a given type at adjacent positions in memory. Inserting at the front or in the middle of a vector can be quite slow, because it can lead to large numbers of items having to be moved by one position in memory.
QStack<T>This is a convenience subclass of QVector that provides “last in, first out” (LIFO) semantics. It adds the following functions to those already present in QVector: push(), pop(), and top().
QQueue<T>This is a convenience subclass of QList that provides “first in, first out” (FIFO) semantics. It adds the following functions to those already present in QList: enqueue(), dequeue(), and head().
QSet<T>This provides a single-valued mathematical set with fast lookups.
QMap<Key, T>This provides a dictionary (associative array) that maps keys of type Key to values of type T. Normally each key is associated with a single value. QMap stores its data in Key order; if order doesn’t matter QHash is a faster alternative.
QMultiMap<Key, T>This is a convenience subclass of QMap that provides a nice interface for multi-valued maps, i.e. maps where one key can be associated with multiple values.
QHash<Key, T>This has almost the same API as QMap, but provides significantly faster lookups. QHash stores its data in an arbitrary order.
QMultiHash<Key, T>This is a convenience subclass of QHash that provides a nice interface for multi-valued hashes.

迭代器类

Qt提供了多种风格的迭代器,Java风格和stl风格

Java风格迭代器

ContainersRead-only iteratorRead-write iterator
QList<T>, QQueue<T>QListIterator<T>QMutableListIterator<T>
QLinkedList<T>QLinkedListIterator<T>QMutableLinkedListIterator<T>
QVector<T>, QStack<T>QVectorIterator<T>QMutableVectorIterator<T>
QSet<T>QSetIterator<T>QMutableSetIterator<T>
QMap<Key, T>, QMultiMap<Key, T>QMapIterator<Key, T>QMutableMapIterator<Key, T>
QHash<Key, T>, QMultiHash<Key, T>QHashIterator<Key, T>QMutableHashIterator<Key, T>

STL风格迭代器

ContainersRead-only iteratorRead-write iterator
QList<T>, QQueue<T>QList<T>::const_iteratorQList<T>::iterator
QLinkedList<T>QLinkedList<T>::const_iteratorQLinkedList<T>::iterator
QVector<T>, QStack<T>QVector<T>::const_iteratorQVector<T>::iterator
QSet<T>QSet<T>::const_iteratorQSet<T>::iterator
QMap<Key, T>, QMultiMap<Key, T>QMap<Key, T>::const_iteratorQMap<Key, T>::iterator
QHash<Key, T>, QMultiHash<Key, T>QHash<Key, T>::const_iteratorQHash<Key, T>::iterator

Qt提供的其他容器

Qt includes three template classes that resemble containers in some respects. These classes don’t provide iterators and cannot be used with the foreach keyword.

  • QVarLengthArray<T, Prealloc> provides a low-level variable-length array. It can be used instead of QVector in places where speed is particularly important.
  • QCache<Key, T> provides a cache to store objects of a certain type T associated with keys of type Key.
  • QContiguousCache<T> provides an efficient way of caching data that is typically accessed in a contiguous way.
  • QPair<T1, T2> stores a pair of elements.

Additional non-template types that compete with Qt’s template containers are QBitArray, QByteArray, QString, and QStringList.

Qt容器算法复杂性

Algorithmic complexity is concerned about how fast (or slow) each function is as the number of items in the container grow. For example, inserting an item in the middle of a QLinkedList is an extremely fast operation, irrespective of the number of items stored in the QLinkedList. On the other hand, inserting an item in the middle of a QVector is potentially very expensive if the QVector contains many items, since half of the items must be moved one position in memory.

To describe algorithmic complexity, we use the following terminology, based on the “big Oh” notation:

  • Constant time: O(1). A function is said to run in constant time if it requires the same amount of time no matter how many items are present in the container. One example is QLinkedList::insert().
  • Logarithmic time: O(log n). A function that runs in logarithmic time is a function whose running time is proportional to the logarithm of the number of items in the container. One example is qBinaryFind().
  • Linear time: O(n). A function that runs in linear time will execute in a time directly proportional to the number of items stored in the container. One example is QVector::insert().
  • Linear-logarithmic time: O(n log n). A function that runs in linear-logarithmic time is asymptotically slower than a linear-time function, but faster than a quadratic-time function.
  • Quadratic time: O(n?). A quadratic-time function executes in a time that is proportional to the square of the number of items stored in the container.

The following table summarizes the algorithmic complexity of Qt’s sequential container classes:

 Index lookupInsertionPrependingAppending
QLinkedList<T>O(n)O(1)O(1)O(1)
QList<T>O(1)O(n)Amort. O(1)Amort. O(1)
QVector<T>O(1)O(n)O(n)Amort. O(1)

In the table, “Amort.” stands for “amortized behavior”. For example, “Amort. O(1)” means that if you call the function only once, you might get O(n) behavior, but if you call it multiple times (e.g., n times), the average behavior will be O(1).

The following table summarizes the algorithmic complexity of Qt’s associative containers and sets:

 Key lookupInsertion
AverageWorst caseAverageWorst case
QMap<Key, T>O(log n)O(log n)O(log n)O(log n)
QMultiMap<Key, T>O(log n)O(log n)O(log n)O(log n)
QHash<Key, T>Amort. O(1)O(n)Amort. O(1)O(n)
QSet<Key>Amort. O(1)O(n)Amort. O(1)O(n)

 

Techie亮博客,转载请注明:Coologic » Qt容器类汇总说明

Coologic 博客域名已更改,已从 www.techieliang.com 改为 www.coologic.cn,上述链接地址受到影响,若需查看源文请手动修改,多有不便,敬请谅解。
Qt 之 连续缓存QContiguousCache 背景 曾经面试遇到过面试官问这个问题:如何展示大量问题,当时简单说了下心里的想法,后来发现跟QContiguousCache有些类似,现在记录下来 问题描述: 当应用程序尤其是Gui程序,需要展示大量数据,例如QListview等,尤其实在内存是有限时。 QContiguousCache类是一个模板类,它提供了一个连续的高速缓存。 所述QContiguousCache类提供了一种在用户界面视图缓存用于显示项目的有效方式。与QCache不同,它增加了一个限制,即缓存中的元素是连续的。这具有匹配用户界面查看最 阅读详情

相关推荐

【QT】容器类

Qt 库提供了一组通用的基于模板的容器类。这些类可以用于存储指定类型的项目。例如,如果需要一个可调整大小的 QString 数组,可以使用 QVector。这些容器类设计得比 STL 容器更轻量、更安全且更易于使用。如果你不熟悉 STL,或者更喜欢“Qt 方式”的做法,可以使用这些类代替 STL 类。容器类是隐式共享的,它们是可重入的,并且经过优化以达到快速、低内存消耗和最小的内联代码扩展,从而生成更小的可执行文件。此外,在所有线程都将它们用作只读容器的情况下,它们是线程安全的。

Hi, Boy 1301

QPair的介绍及用法

QPair是一个模板类,它存储一对值(key,value),可以是不同的数据类型。

future_ai的博客 5856

【QT】容器类控件

qt中常用容器类控件,Group Box分组框,Tab Widget实现标签页,布局管理器:垂直布局,水平布局,网格布局,表单布局的核心属性与使用示例,以及QSpacerItem的用处

lzb_kkk的博客 1781

QT跨平台应用程序开发框架(9)—— 容器类控件

QGridLayout 用来实现网格布局的效果,可以达到 M * N 的这种网格效果,主要属性和 QHBoxLayout 类似,但是设置 spacing 的时候是按照垂直水平两个方向来设置的。每个 Widget 只能设置一个布局管理器, 但是可以通过拖拽方式创建两个布局遍历器,但是这样创建的布局管理器仅仅只会将内部控件重新组合位置,并不会像上面一样随着窗口大小改变。而容器内控件包含的直接就是我们前面介绍的一堆的控件。解答:我们前面使用ui创建界面时,都是手动拖拽方式来布局的,其实这种方式不科学。

aaqq800520的博客 1161

QT容器类

QT容器类,相对于C++的STL容器类,更为小巧、安全和方便使用。QT5在容器类里面做了优化速度、内存、inline等操作。 QT5容器类:QList、QLinkedList、QVector、QMap、QHash、QVariant类等。 QT5容器类中,容器可以存储的数据有: 1、基本数据类型,如int、float等。 2、QT的一些数据类型,比如QString、QDate、QTime等。 切记:...

link的博客,欢迎大家。 670

QT QList<T>介绍与应用、详解、使用说明、官方手册翻译

文章目录1. 简介2. 使用示例3. 官方手册4. Member Function Documentation 1. 简介 QList<T>是目前最常用的容器类 。它存储了给定类型的值的一个列表,而这些值可以通过索引访问。在内部,QList使用数组来实现,一确保进行快速的基于索引的访问。可以使用QList::append()和QList::prepend()在列表的两端添加项目,也可以使用QList::insert()在列表的中间插入项目。常用的QStringList继承自QList<QS

超级大洋葱的博客 6万+

C++ Qt开发:使用顺序容器类

Qt 中提供了丰富的容器类,用于方便地管理和操作数据。这些容器类涵盖了各种不同的用途,从简单的动态数组到复杂的映射和集合。本章我们将主要学习顺序容器,顺序容器是一组强大而灵活的数据结构,用于按照元素添加的顺序存储和管理数据。Qt提供了多种顺序容器,每种都具有独特的特性,这些容器包括向量、列表、队列、栈等,每种都有特定的适用场景。

微软技术分享 5641

Qt的QContiguousCache类的使用

与Qt中其他的容器类不同,QContiguousCache的实现方法更加注重数据的连续性,因此在实际应用中可以更高效地使用内存。除此之外,QContiguousCache还提供了一些其他的常用方法,例如removeFirst()、removeLast()等。综上所述,QContiguousCache作为QT中的一个容器类,具有很好的内存管理和优化能力,适合在需要高效处理大量数据时使用。在一些特殊的情况下,我们需要获取缓存中的原始数据,并进行修改。Qt的QContiguousCache类的使用。

uote_e的博客 472

【QT学习五】Qt 的容器类QList,QVector,QSet,QMap等

它可以存储任何类型的对象,并提供了许多实用的函数来方便地访问和操作列表中的元素。QSet是一个集合,它存储不同的值,并提供了许多函数来方便地访问和操作集合中的元素。注意:存储在Qt容器中的数据必须是可赋值的数据类型,Qt的Object类以及其子类是不能够存储在容器中的,但可以存储其指针。优点:支持高效的随机访问,可以快速插入和删除元素,可以保持元素的顺序。优点:支持高效的随机访问,可以快速插入和删除元素,可以保持元素的顺序。优点:支持高效的查找,插入和删除元素,可以保持元素的唯一性。

从此不归路 2805

QT的QContiguousCache类的使用

详细说明 QContiguousCache类是提供连续缓存的模板类。 QContiguousCache类提供了一种有效的方式来缓存项以在用户界面视图中显示。与QCache不同,它增加了一个限制,即缓存中的元素是连续的。这具有匹配用户界面如何查看最常见的请求数据的优势,这是围绕当前滚动位置定位的一组行。与QCache相比,此限制使缓存可以消耗更少的内存和处理器周期。 QContiguousCache以setCapacity()设置或作为参数传递给构造函数的固定容量运行。此容量是高速缓存本身对内存使用的上限,不

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1259

minist手写数字的识别代码复现(pytorch 版本)

电脑系统:Windows 10语言环境:Python 3.8.18编译器:jupyter notebook深度学习环境:torch == 1.13.1+cu116显卡及显存: Tesla V100-PCIE-32GB卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种 具有局部连接、权重共享等特性的深层前馈神经网络. 目前的卷积神经网络一般是由卷积层、汇聚层和全连接层交叉堆叠而成的 前馈神经网络。

2202_75521293的博客 2620

【QT】常用控件 【多元素类 | 容器类 | 布局类】

本文详细介绍了Qt框架中常用的多元素类控件(如QListWidget、QTableWidget、QTreeWidget)、容器类控件(如QGroupBox、QTabWidget)以及布局类控件(如QVBoxLayout、QHBoxLayout、QGridLayout、QFormLayout)。通过代码示例和图形化界面操作,展示了如何使用这些控件创建高度定制化的用户界面,并强调了布局管理器在界面设计中的重要性。

You build it, you run it 7953

开源人形机器人硬件生态:关键技术、产业链与低成本突破 | OpenLoong 社区线下分享会

本文将深入探讨人形机器人硬件平台的关键技术、产业链与核心部件以及降低成本的策略。从硬件平台的核心技术,到机器人核心零部件的详细介绍,再到产业链各环节的协同发展以及实现低成本化的创新思路,将一同剖析人形机器人迈向广泛应用所面临的挑战与机遇,展望其未来的发展趋势,为开发者和相关从业者提供一些参考与启示。

OpenLoong_的博客 2421

Qt学习笔记1.3.1 Qt Core-容器类

Qt库提供基于模板的通用容器类,相比STL容器类更轻量化、安全和易用。容器类是隐式共享的、可重入的并且针对速度、低内存开销和最小内内联代码拓展进行了优化,这样实现了更小的可执行文件。此外。在某些情况下被用作只读容器时是线程安全的.为了访问容器内的项目,可以使用两种类型的迭代器:java风格迭代器和STL风格迭代器。java风格迭代器更易用而且提供高级功能。STL风格稍微更高效而且可以和QT和STL的泛型算法一起使用。QT还提供foreach关键字更方便地遍历容器。

qq_18466391的博客 1487

TensorFlow_PyTorch实战:构建AI人工智能回归模型

回归分析是机器学习的核心任务之一,用于预测连续型目标变量(如房价、股票价格、用户留存时间等)。基础线性回归模型的数学原理与代码实现多项式回归模型的过拟合处理与正则化技巧自定义数据集加载与数据预处理流程动态图(PyTorch)与静态图(TensorFlow)的编程范式对比模型评估指标与可视化分析方法核心概念:对比两大框架的架构设计,解析回归模型核心组件数学原理:推导线性回归的假设函数、损失函数及优化算法算法实现:提供TensorFlow和PyTorch的完整代码示例项目实战。

AI天才研究院 1430

瑞萨MCU定时器API实战:从Smart Configurator配置到中断与输入捕获应用

在嵌入式系统开发中,定时器(Timer)是实现精准时序控制、PWM输出和信号测量的核心硬件外设。其工作原理基于计数器在稳定时钟源驱动下递增或递减,达到预设值后触发中断或改变输出电平,从而为系统提供节拍和事件基准。通过图形化配置工具(如瑞萨的Smart Configurator),开发者可以高效地将复杂的硬件寄存器操作转化为清晰、标准化的C语言API函数,这极大地提升了开发效率并降低了出错风险。这种从硬件抽象到软件接口的技术价值在于,它使得开发者能更专注于应用逻辑,而非底层细节,尤其适用于工业控制、汽车电子等

weixin_42519733的博客 274

Qt中的容器类

<!-- @page {margin:0.79in} p {margin-bottom:0.08in} --> Qt提供了两种类型的容器类:序列容器和关联容器。例如QVector,QLinkedList和QList属于序列容器,而QMap和QHash属于关联容器。 Qt提供了通用的算法,对这些容器类执行一些操作,如qSort()对一个序列容器进行排序,而qBinary

山庄来客的专栏 3054

Macbook Pro上如何修改brew源

一、需求说明 我的macbook电脑安装了中科大的brew源码,发现安装gpg工具失败,其他工具可以正常安装,为了能将gpg安装成功,就找了找切换brew源的方案,记录如下。 二、切换至国内源 由于使用github默认源有可能存在路径远或者部分服务访问超时的原因,切换至国内源可以提速。 2.1 替换brew.git $ cd "$(brew --repo)" # 中国科大: $ git remote set-url origin https://mirrors.ustc.edu.cn/brew.git #

bufegar0的博客 1079

「QT」顺序容器类 之 QList 通用列表类

QList是Qt框架中提供的一个基于模板的通用容器类,它用于存储同一类型的元素序列。QList是一个动态数组,能够根据需要自动调整大小,且支持快速的随机访问。与QVector相比,QList在底层实现上使用了链表结构(虽然具体实现细节可能因Qt版本而异,但QList通常被认为在插入和删除操作上性能更优,而在随机访问上可能稍逊于QVector)。QList是Qt容器类库中的一个重要成员,广泛应用于图形界面编程、数据处理等场景。QList提供了多种构造函数,允许以不同的方式创建和初始化QList对象。

何曾参静谧的博客 2604

利用按键精灵实现批量截图与智能命名的高效工作流

本文详细介绍了如何利用按键精灵软件构建高效的批量截图与智能命名自动化工作流。通过基础脚本编写、循环逻辑实现及高级命名策略,解决手动操作耗时易错的问题,帮助用户实现一键自动截图、智能保存与文件重命名,大幅提升软件测试、教程制作及数据报告等场景的工作效率。

weixin_29268267的博客 569

【用ArcGIS制作一张好看的中国月度气温图

要最后选中那个事先调整好的那个数据框,这样其他两个数据框才能和其大小一致。

J_Giser的博客 1017

【QT】控件 -- 多元素类 | 容器类 | 布局类

该文章是关于 QT 控件的多元素类、容器类、布局类的补充

island1314的博客 2839

【HAL库】STM32CubeMX开发----STM32F407----ETH+LAN8720A+LWIP----ping通

本次实验以芯片为MCU,使用25MHz外部时钟源。以太网PHY层芯片为LAN8720A,由MCU引脚PA8提供时钟。

MQ0522的博客 4844

『 QT 』容器类控件

本文介绍了Qt中的QGroupBox控件及其应用。QGroupBox是一个带有标题的分组框,可用于将其他控件分组以优化布局和界面美观。文章对比了QGroupBox与QButtonGroup的区别,详细说明了QGroupBox的核心属性(如title、alignment、flat、checkable等)。通过一个点餐系统的代码示例,展示了如何使用QGroupBox进行分组布局,包括初始化控件、设计辅助函数、实时更新显示内容等功能。示例中还演示了checkable和flat属性的效果,展示了如何通过属性设置改变

小侯宝的博客 1378

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Qt 容器类+for循环

Qt容器类在多线程环境下,如果仅用于只读操作是线程安全的,但对容器的修改(如插入、删除、移动元素等)需要在适当的锁保护下进行。:使用完容器后,确保及时清理或删除不再使用的容器及其中的元素,尤其是在容器中有自定义对象时,避免内存泄漏。:与 QList 类似,但更适合在列表中间插入和删除元素,使用迭代器而非索引进行访问。:最常用的容器类,以数组的形式存储元素,支持快速的索引访问和在首尾插入元素。:与 QMap 类似,但使用哈希表实现,提供更快的查找速度。Qt 的容器类主要分为两大类:顺序容器和关联容器。

笔记本 1071

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: C++设计模式
下一篇: 《Effectirve C++》笔记
coologic
博客等级 码龄7年 35粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值