在开发一个较高性能需求的应用程序时,程序员会比较关注这些容器类的运行效率,表2.1列出了QList、QLinkedList和QVector容器的时间复杂度比较。java
QList<T>
是迄今为止最经常使用的容器类,它存储给定数据类型T的一列数值。
QList不只提供了能够在列表进行追加的QList::append()和Qlist::prepend()函数,还提供了在列表中间完成插入操做的函数QList::insert()。程序员
QList<T>
维护了一个指针数组,该数组存储的指针指向QList<T>
存储的列表项的内容。
对于不一样的数据类型,QList<T>
采起不一样的存储策略,存储策略有如下几种。数组
<T>
会将数值直接存储在它的数组中。<T>
存储对象的指针,则该指针指向实际存储的对象。下面举一个例子:app
#include <QDebug> int main(int argc,char *argv[]) { QList<QString> list; { QString str("This is a test string"); list<<str; } qDebug()<<list[0]<< "How are you! "; return 0; }
QLinkedList<T>
是一个链式列表,它以非连续的内存块保存数据。
QLinkedList<T>
不能使用下标,只能使用迭代器访问它的数据项。函数
QVector<T>
在相邻的内存中存储给定数据类型T的一组数值。
QVector<T>
既能够使用下标访问数据项,也能够使用迭代器访问数据项。性能
Java风格的迭代器是Qt 4新加入的一个功能。 对于每个容器类,Qt都提供了两种类型的Java风格迭代器数据类型,即只读访问和读写访问,其分类见表2.2。指针
对于每个容器类,Qt都提供了两种类型的STL风格迭代器数据类型:一种提供只读访问;另外一种提供读写访问。STL风格迭代器的两种分类见表2.3。code