QList类、QLinkedList类和QVector类

来源:互联网 发布:洛瑞数据 编辑:程序博客网 时间:2024/06/05 04:42

这样的数据类型包含了通常使用的大多数数据类型,包括基本数据类型(如int和double等)和Qt的一些数据类型(如QString、QDate和QTime等)。不过,Qt的QObject及其他的子类(如QWidget和Qdialog等)是不能够存储在容器中的,例如:

 QList<QToolBar> list;

上述代码是无法通过编译的,因为这些类(QObject及其他的子类)没有复制构造函数和赋值操作运算符。
一个可代替的方案是存储QObject及其子类的指针,例如:

QList<QToolBar*> list;

Qt的容器类是可以嵌套的,例如:

QHash<QString, QList<double> >
1.QList类对于不同的数据类型,QList<T>采取不同的存储策略,存储策略有以下几种。(1)如果T是一个指针类型或指针大小的基本类型(即该基本类型占有的字节数和指针类型占有的字节数相同),QList<T>会将数值直接存储在它的数组中。(2)如果QList<T>存储对象的指针,则该指针指向实际存储的对象。下面举一个例子: #include <QDebug>int main(int argc,char *argv[]){    QList<QString> list;                                //(a)    {        QString str("This is a test string");        list<<str;                                  //(b)    }                                           //(c)    qDebug()<<list[0]<< "How are you! ";    return 0;}2.QLinkedList类QLinkedList<T>是一个链式列表,它以**非连续的内存块**保存数据。QLinkedList<T>**不能使用下标,只能使用迭代器访问它的数据项**。与QList相比,当对一个很大的列表进行插入操作时,QLinkedList具有更高的效率。3.QVector类QVector<T>在**相邻的内存中存储给定数据类型T的一组数值**。在一个QVector的前部或者中间位置进行插入操作的速度是很慢的,这是因为这样的操作将导致内存中的大量数据被移动,这是由QVector存储数据的方式决定的。![java风格迭代器遍历容器](http://img.blog.csdn.net/20160607162603316)1)QList只读遍历方法。【例】(简单) 通过控制台程序实现QList只读遍历方法。其具体代码如下:#include <QDebug>                      //(a)int main(int argc,char *argv[]){    QList<int> list;                    //创建一个QList<int>栈对象list    list<<1<<2<<3<<4<<5;                //用操作运算符“<<”输入五个整数    QListIterator<int> i(list);         //(b)    for(;i.hasNext();)                  //(c)        qDebug()<<i.next();    return 0;}最后程序的运行结果为:1 2 3 4 5

QListIterator::toBack():将迭代点移动到最后一个列表项的后面。
QListIterator::hasPrevious():检查当前迭代点之前是否具有列表项。
QListIterator::previous():返回前一个列表项的内容并将迭代点移动到前一个列表项之前。
toFront():移动迭代点到列表的前端(第一个列表项的前面)。
peekNext():返回下一个列表项,但不移动迭代点。
peekPrevious():返回前一个列表项,但不移动迭代点。
findNext():从当前迭代点开始向后查找指定的列表项,如果找到,则返回true,此时迭代点位于匹配列表项的后面;如果没有找到,则返回false,此时迭代点位于列表的后端(最后一个列表项的后面)。
findPrevious():与findNext()类似,不同的是它的方向是向前的,查找操作完成后的迭代点在匹配项的前面或整个列表的前端。

这里写图片描述

例】(简单) 使用STL风格迭代器。具体代码如下: #include <QDebug>int main(int argc,char *argv[]){    QList<int> list;            //初始化一个空的QList<int>列表    for(int j=0;j<10;j++)        list.insert(list.end(),j);  //(a)    QList<int>::iterator i;     //初始化一个QList<int>::iterator读写迭代器    for(i=list.begin();i!=list.end();++i)   //(b)    {           qDebug()<<(*i);           *i=(*i)*10;    }    //初始化一个QList<int>:: const_iterator读写迭代器    QList<int>::const_iterator ci;    //在控制台输出列表的所有值    for(ci=list.constBegin();ci!=list.constEnd();++ci)            qDebug()<<*ci;    return 0;}最后编译,运行此应用程序,输出结果如下: 0  1   2   3   4   5   6   7   8   90  10  20  30  40  50  60  70  80  90
0 0
原创粉丝点击