参考:
Qt 容器类之关联存储容器_w3cschool
https://www.w3cschool.cn/learnroadqt/7vj11j4v.html
Qt 容器类之顺序存储容器_w3cschool
https://www.w3cschool.cn/learnroadqt/rmgv1j4p.html
C++ GUI Programming with Qt 4, Second Edition
本地环境:
win10专业版,64位
Qt5.12.0
几种顺序容器
比较
-
QVector:顺序存储,类似数组,可以改变大小,随机存取和在末尾添加数据效率很高。
-
QLinkedList:只能用append()或者<<进行追加
-
QList:结合QVector和QLinkedList的优点,支持随机访问和[],也可以快速添加和删除。除非在很大的集合的中间进行添加、删除(链表更好),或者需要所有元素都在内存中连续存储(向量更好),否则应该一直用QList。
-
QStringList:QList的子类,提供针对QString的特殊操作。
-
QStack:有push() pop() top()
-
QQueue:有enqueue() dequeue() head()
QVector
QVector<double> v;
// 可以指定长度
// QVector<double> v(2);
v.append(1.1);
v[0] = 1.2; // 支持index
v << 1.3 << 2; // 重载了,可以追加数据
QList
#include <QList>
QList<int> Starts;
QStringList
push_back和append的区别
// push_back()函数是QStringList类的成员函数。它用于在列表的末尾添加一个元素。只能添加元素
QStringList list;
list.push_back("abc");
list.push_back("def");
// append()函数是QStringList类的成员函数,也是Qt中通用的容器类(如QList、QVector等)的成员函数。它用于在列表的末尾添加一个元素,也可以添加列表
QStringList list;
list.append("abc");
list.append("def");
QStringList anotherList;
anotherList.append(list);
关联存储容器
就是哈希表、键值对存储。qt5可用的是QMap
和QHash
。
QMap
- QMap<K, T>是按照K升序的顺序存储的,插入数据使用
insert
,也可以用[]
,因为已经重载了该运算符。 - 但如果使用
[]
取值,在非const的QMap中,如果这个K不存在,K会被自动创建,并且给T赋予空值。如果想避免这个,需要使用value()
。QMap