(二十三)Qt中的容器类简介

Qt中提供了一组通用的基于模板的容器类(container classes)。

与STL中的容器类相比:

1、  Qt中的容器类更轻量、更安全、更容易使用

2、  Qt容器类在所有平台上运行时表现一致,而不仅仅是接口接口一致

3、  Qt容器类都是隐式数据共享的,这使得我们在使用时可以pass-by-value而不用担心由此带来的性能问题(在没有隐式共享的情况下,如果操作类对象时使用pass-by-value的方式,会带来多次的构造与析构,详情参见”Effective C++”条款20)

4、  拥有更易使用的迭代器类(一种java风格的迭代器,Qt中也提供了STL风格的迭代器,我们可以自行选择)

5、  由于Qt容器类更加轻量,在嵌入式平台中比STL更值得使用

 

Qt中的容器类分类:

1、顺序容器(容器中的数据线性存储):QList(数组列表)、QLinkedList(链表)、QVector(向量)、QStack(栈)、QQueue(队列)

2、关联容器(容器存储的是<键,值>对):QMap(skip-list-based字典)、QMultiMap、QHash(哈希表)、QMultiHash、QSet

注:带” QMulti”支持一个键多个值的情况

 

容器要求:

QT容器中能存储的元素的类型是要求的:元素必须是可以赋值的数据类型,即元素类型必须有一个默认的构造函数(即无参数构造函数,或者全部参数都带有默认值的构造函数也行)、一个拷贝构造函数(拷贝构造)和一个赋值操作符函数(operator=)(这两个函数也可以由编译器提供)。基本的数据类型(int和double等)和QT部分数据类型(如 QString、QDate、QTime等)可以存储在容器中,QObject及其子类(如QWidget和Qdialog等)是不可以存储在容器中的,但QObject及其子类的指针可以存储在容器中。

 


                
### Qt 容器类概述 Qt 提供了一系列高效的容器类来存储和管理数据集合。这些容器类被设计成模板化,可以容纳任何类型的对象[^1]。 #### QList 类 `QList<T>` 是一个顺序容器,提供了快速的索引操作以及相对快速的追加操作。对于大多数应用场景来说,这是最常用的列表实现方式之一。它内部实现了数组结构,在访问随机位置上的元素时性能较好。 ```cpp // 创建并初始化一个整数型的QList QList<int> numbers; numbers << 1 << 2 << 3; // 访问第一个元素 int firstNumber = numbers.first(); // 追加新元素到末尾 numbers.append(4); ``` #### QLinkedList 类 `QLinkedList<T>` 实现了一个双向链表的数据结构,适合频繁地在中间插入或删除节点的情况。相比于 `QList`, 对于这类操作效率更高;但在通过下标查找特定项的速度上会慢一些。 ```cpp // 初始化字符串类型的QLinkedList QLinkedList<QString> names; names.push_back("Alice"); names.prepend("Bob"); // 遍历整个链接列表打印所有名字 for (auto it = names.begin(); it != names.end(); ++it){ qDebug() << *it; } ``` #### 容器对比 当选择使用哪种容器时,应该考虑具体的应用场景需求: - 如果程序经常执行随机存取或者只需要在一端添加/移除项目,则应优先选用 `QList`. - 当涉及到大量的中部插入与删除动作时,推荐采用 `QLinkedList`. 此外,两种容器都支持迭代器遍历、STL风格算法接口等功能特性.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值