容器类就类似STL中的容器,里面可以包含大多数的数据类型,基本类型和Qt的一些数据类型(QString、QDate和QTime等);
Qt中的QObject以及其他的子类对象是不能够储存在容器中的;
例:
QList<QToolBar> list;
Qt提供了两个容器类:
1、顺序容器:QList、QLinkedList、QVector、QStack和QQueue;
(1)顺序容器中的数据因为都是一个接一个线性储存的,所以叫顺序容器;
(2)大多数时候,QList是最好的选择,虽然他是用数组实现的,但它首尾添加元素都非常快。(用于添加、插入、替换、移动、删除;它的数据项有:insert()、replace()、removeAt()、move()、swap()、append()、prepend()、removeFirst() 和 removeLast() 等。)

(3) QLinkedList<T> 是链式列表,数据项不是用连续的内存存储的,它基于迭代器访问数据项,并且插入和删除数据项的操作时间相同。除了不提供基于下标索引的数据项访问外,QLinkedList 的其他接口函数与 QList 基本相同。
(4) QVector 的函数接口与 QList 几乎完全相同,QVector<T> 的性能比 QList<T> 更高,因为 QVector<P> 的数据项是连续存储的。
(5)QStack和QQueue(栈和队列)分别提供了后进先出(LIFO)和先进先出(FIFO)的机制。

2、关联容器:QMap、QMultiMap、QHash、QMultiHash、QSet。
(1)因为这些容器存储的是<键,值>对,比如QMap<Key,T>,所以称为关联容器。
也可以使用insert()函数赋值,或remove()移除一个键值对
map.insert("four", 4);
map.remove("two");
要查找一个值,使用运算符“[]”或value()函数
int num1 = map["one"];
int num2 = map.value("two");
(2)QMulti容器支持一个键对应多个值。
(3)QHash容器在有序集合上使用hash函数进行快速的查找,而没有用二叉搜索。
(4)QHash和QMap的差异:
1、QHash在查找元素时效率要高于QMap
2、QHash的元素是无序排列的,QMap的元素是按照Key的顺序存储的。
3、QHash的Key类型必须提供重载的==运算符和一个全局的qHash(Key)方法;QMap的Key类型必须提 供重载的<运算符。
类 | 概述 | |
QList<T> | 这是目前使用最频繁的容器类,它存储了指定类型(T)的一串值,可以通过索引来获得。本质上QList是用数组实现的,从而保证基于索引的访问非常快。 | |
QLinkedList<T> | 类似于QList,但它使用迭代器而不是整数索引来获得项。当在一个很大的list中间插入项时,它提供了更好的性能,并且它有更好的迭代器机制。 | |
QVector<T> | 在内存中相邻的位置存储一组值,在开头或中间插入会非常慢,因为它会导致内存中很多项移动一个位置。 | |
QStack<T> | QVector的一个子类,提供后进先出的机制。在当前的QVector中增加了几个方法:push()、pos()、top()。 | |
QQueue<T> | QList的一个子类,提供了先进先出的机制,在当前的QList中增加了几个方法:enqueue()、dequeue()、head()。 | |
QSet<T> | 单值的数学集合,能够快速查找。 | |
QMap<Key, T> | 提供了字典(关联数组)将类型Key的键对应类型T的值。通常一个键对应一个值,QMap以Key的顺序存储数据,如果顺序不重要,QHash是一个更快的选择。 | |
QMultiMap<Key, T> | QMap的子类,提供了多值的接口,一个键对应多个值。 | |
QHash<Key, T> | 和QMap几乎有着相同的接口,但查找起来更快。QHash存储数据没有什么顺序。 | |
QMultiHash<Key, T> | QHash的子类,提供了多值的接口。 |