Qt中的容器
关于Qt中的容器类,下面我们来进行一个总结:
Qt的容器类比标准模板库(STL)中的容器类更轻巧、安全和易于使用。这些容器类是隐式共享和可重入的,而且他们进行了速度和存储的优化,因此可以减少可执行文件的大小。此外,他们还是线程安全的,也就是说他们作为只读容器时可被多个线程访问。
(隐式共享:是对象的管理方法。一个对象被隐式共享,只是传递该对象的一个指针给使用者,而不实际复制对象数据,只有在使用者修改数据时,才实质复制共享对象给使用者。)QtCreator中说明如下图:
一、顺序容器类
QList : 动态数组,支持快速的头部和尾部插入删除操作,以及通过索引访问元素。
QVector:类似于QList,但内部实现保证了元素在内存中连续存储,对于大数据量并且频繁随机访问时,可能有更好的性能表现。
QLinkedList: 双向链表,支持高效地在列表中间进行插入和删除操作,但不支持通过索引直接访问元素。
QStatck: 后进先出(LIFO)栈容器。
QQueue: 先进先出(FIFO)队列容器。
二、关联容器类
QSet: 集合容器,只包含唯一元素,不存储值对应的键
QMap: 键值对映射容器,键值对按键自动排序
**QMultimap:**QMap子类,提供定义关键字模式形态,基于多映射
QHash: 哈希表实现的键值对容器,提供常数时间复杂度的快速查找能力
**QMultiHash:**提供多个关键字模型
三、相应的迭代器类:
QtCreator中关于迭代器的说明如下图:
QPair: 一种轻量级容器,可以同时存储两个不同类型的对象,适用于函数返回多个值时的场景
QHashIterator: QHashIterator是用来遍历QHash中元素的迭代器类。使用QHashIterator的时候需要注意,只有在QHash不被改变的情况下才能使用它来遍历QHash,否则会导致程序崩溃或产生未定义的行为。
QMapIterator: 只读,无 setValue() 方法。
QMutableMapIterator: 可以修改,有 setValue()方法。
QMutableSetIterator: 用于迭代和修改QSet集合。它允许我们在迭代过程中添加、删除和修改集合中的元素。
QMutableListIterator: 用于在可变的QList容器上进行迭代操作。它提供了一组方法,允许我们在列表中插入、替换和删除元素。
QMutableLinkedListIterator: 简单来说就是可读可写的迭代器,一样支持前后迭代, hasNext() 前向遍历,hasPrevious() 反向遍历。
同时呢,用 remove() 删除节点,用 insert() 插入节点,用setValue()来修改节点值
参考文章:
1.Qt容器类总结 - 李家的小猴子 - 博客园Qt容器类总结 - 李家的小猴子 - 博客园
2.QT中的 容器(container)-大全_qt 容器-CSDN博客