QList类、QLinkedList类和QVector类

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

 QList<QToolBar> list;

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

QList<QToolBar*> list;

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

QHashdouble> >
1.QList类
对于不同的数据类型,QList采取不同的存储策略,存储策略有以下几种。
(1)如果T是一个指针类型或指针大小的基本类型(即该基本类型占有的字节数和指针类型占有的字节数相同),QList会将数值直接存储在它的数组中。
(2)如果QList存储对象的指针,则该指针指向实际存储的对象。
下面举一个例子:
 #include 
int main(int argc,char *argv[])
{
    QList list;                                //(a)
    {
        QString str("This is a test string");
        list<list[0]<< "How are you! ";
    return 0;
}

2.QLinkedList类
QLinkedList是一个链式列表,它以**非连续的内存块**保存数据。
QLinkedList**不能使用下标,只能使用迭代器访问它的数据项**。与QList相比,当对一个很大的列表进行插入操作时,QLinkedList具有更高的效率。
3.QVector类
QVector在**相邻的内存中存储给定数据类型T的一组数值**。在一个QVector的前部或者中间位置进行插入操作的速度是很慢的,这是因为这样的操作将导致内存中的大量数据被移动,这是由QVector存储数据的方式决定的。

![java风格迭代器遍历容器](http://img.blog.csdn.net/20160607162603316)1)QList只读遍历方法。
【例】(简单) 通过控制台程序实现QList只读遍历方法。
其具体代码如下:
#include                       //(a)
int main(int argc,char *argv[])
{
    QList<int> list;                    //创建一个QList栈对象list
    list<<1<<2<<3<<4<<5;                //用操作运算符“<<”输入五个整数
    QListIterator<int> i(list);         //(b)
    for(;i.hasNext();)                  //(c)
        qDebug()<return 0;
}
最后程序的运行结果为:
1 2 3 4 5

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

QList类、QLinkedList类和QVector类_第1张图片

例】(简单) 使用STL风格迭代器。
具体代码如下:
 #include 
int main(int argc,char *argv[])
{
    QList<int> list;            //初始化一个空的QList列表
    for(int j=0;j<10;j++)
        list.insert(list.end(),j);  //(a)
    QList<int>::iterator i;     //初始化一个QList::iterator读写迭代器
    for(i=list.begin();i!=list.end();++i)   //(b)
    {
           qDebug()<<(*i);
           *i=(*i)*10;
    }
    //初始化一个QList:: 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   9
0  10  20  30  40  50  60  70  80  90

你可能感兴趣的:(qt,qt)