在开发一个较高性能需求的应用程序时,程序员会比较关注这些容器类的运行效率,表2.1列出了QList、QLinkedList和QVector容器的时间复杂度比较。
1.QList类
QList<T>
是迄今为止最常用的容器类,它存储给定数据类型T的一列数值。
QList不仅提供了可以在列表进行追加的QList::append()和Qlist::prepend()函数,还提供了在列表中间完成插入操作的函数QList::insert()。
QList<T>
维护了一个指针数组,该数组存储的指针指向QList<T>
存储的列表项的内容。
对于不同的数据类型,QList<T>
采取不同的存储策略,存储策略有以下几种。
- (1)如果T是一个指针类型或指针大小的基本类型(即该基本类型占有的字节数和指针类型占有的字节数相同),QList
<T>
会将数值直接存储在它的数组中。 - (2)如果QList
<T>
存储对象的指针,则该指针指向实际存储的对象。
下面举一个例子:
#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;
}
2.QLinkedList类
QLinkedList<T>
是一个链式列表,它以非连续的内存块保存数据。
QLinkedList<T>
不能使用下标,只能使用迭代器访问它的数据项。
3.QVector类
QVector<T>
在相邻的内存中存储给定数据类型T的一组数值。
QVector<T>
既可以使用下标访问数据项,也可以使用迭代器访问数据项。
4.Java风格迭代器遍历容器
Java风格的迭代器是Qt 4新加入的一个功能。 对于每一个容器类,Qt都提供了两种类型的Java风格迭代器数据类型,即只读访问和读写访问,其分类见表2.2。
5.STL风格迭代器遍历容器
对于每一个容器类,Qt都提供了两种类型的STL风格迭代器数据类型:一种提供只读访问;另一种提供读写访问。STL风格迭代器的两种分类见表2.3。