目录
一、概述
1.1、Qt容器类的优点
1.2、Qt容器类的缺点
1.3、Qt容器类与STL容器类的对比
二、各个容器的说明
2.1、QList
2.2、QVector
2.3、QLinkedList
2.4、QMap
2.5、QHash
2.6、QSet
Qt是一个流行的C++跨平台应用程序框架,提供了一组通用的基于模板的容器类来帮助开发人员在他们的应用程序中有效地组织和管理数据。
这些容器类包括QList、QVector、QLinkedList、QSet、QMap、QHash等。
注意:存储在Qt容器中的数据必须是可赋值的数据类型,Qt的Object类以及其子类是不能够存储在容器中的,但可以存储其指针。
例如:
Qvector lstLabel;//编译无法通过
Qvector lstLabel;//编译通过
QList是一个动态数组,类似于std::list,它可以自动调整大小以适应其包含的项目。它可以存储任何类型的对象,并提供了许多实用的函数来方便地访问和操作列表中的元素。由于它是基于指针实现的,所以插入和删除元素的效率比QVector更高。与QVector不同,使用QList时需要使用迭代器来访问元素。例如:
QList list;
list.append(1);
list.append(2);
list.append(3);
QList::iterator it;
for(it = list.begin(); it != list.end(); it++)
{
qDebug() << *it;
}
QList的子类有QByteQrrayList,QItemSelection,QQueue,和QStringList.
QVector是一个高效的动态数组,类似于std::vector,它提供了与QList相似的函数,但在某些情况下性能更好。它还提供了许多其他函数来优化数组的访问和操作。它可以自动调整大小以适应数据的数量,并且支持快速的随机访问。使用QVector时,我们可以使用下标运算符“[]”来访问元素。例如:
QVector v;
v.append(1);
v.append(2);
v.append(3);
for(int i = 0; i < v.size(); i++)
{
qDebug() << v[i];
}
QVector的子类有QPolygon,QPolygonF,QStack,QVulkanInfoVector和QXmlStreamAttributes。
QLinkedList是一个双向链表,可用于存储和操作任何类型的对象。它提供了许多函数来方便地访问和操作列表中的元素,它可以在任意位置快速插入和删除元素。在插入和删除元素时比QList更快,但是访问元素的效率比QList和QVector更低。使用QLinkedList时,我们也需要使用迭代器来访问元素。例如:
QLinkedList linkedList;
linkedList.append(1);
linkedList.append(2);
linkedList.append(3);
QLinkedList::iterator it;
for(it = linkedList.begin(); it != linkedList.end(); it++)
{
qDebug() << *it;
}
Note: This class is obsolete, please use std::list instead.
QMap是一个关联数组,它将键映射到值。它可以存储任何类型的对象,并提供了许多函数来方便地访问和操作映射中的元素。类似于std::map。它可以将键映射到值,并支持快速的查找和插入操作。例如:
QMap map;
map.insert("apple", 1);
map.insert("banana", 2);
map.insert("cherry", 3);
QMap::iterator it;
for(it = map.begin(); it != map.end(); it++)
{
qDebug() << it.key() << ":" << it.value();
}
QMap的子类有QMultiMap。
QHash是一个高效的哈希表,它将键映射到值。它提供了与QMap相似的函数,但在某些情况下性能更好。例如:
QHash hash;
hash.insert("key 2", 2);
hash.insert("key 0", 0);
hash.insert("key 1", 1);
QHash::const_iterator iter;
for(iter=hash.constBegin(); iter!=hash.constEnd(); ++iter)
{
qDebug() << iter.key() << ":" << iter.value();
}
QHash的子类有QMultiHash。
QSet是一个集合,它存储不同的值,并提供了许多函数来方便地访问和操作集合中的元素。它可以存储一组唯一的值,并支持快速的查找和插入操作。例如:
QSet set;
set.insert(1);
set.insert(2);
set.insert(3);
QSet::iterator it;
for(it = set.begin(); it != set.end(); it++)
{
qDebug() << *it;
}
这些是一些常用的Qt容器类,它们提供了广泛的功能和灵活性,可以帮助开发人员轻松地管理和操作他们的数据。