引言:

容器类和迭代器类提供 删除、修改、插入和保存数据的功能。

这两种类可以将各种数据类型的数据以元素为单位进行存储。

例如:

不使用Qt提供的容器类:如果要将QString类型的数据存储到数组,则事先我们必须要知道有多少个元素需要存储。

使用Qt提供的容器类:容器类将QString数据存储到可变大小的数组时,可以使用QVector<QString>的容器类插入、删除和修改数据。十分的方便。

Qt容器类

Qt提供的容器类非常简单、轻便和安全。Qt还提供foreach关键字,使用该关键字可以轻松的访问容器类存储的元素。

Qt容器类(表)



容器类可以将多种数据集合为一体。如:QMap<QString , QList<int>>。


风格:

容器类用于存储数据,而迭代器类则用于访问容器类存储的特定项目的聚合模式。根据迭代器的风格,可以分为java风格STL风格

个人感觉java风格的迭代器模式要比STL风格的迭代器模式使用起来更为方便。对于各个容器类,java风格的迭代器有两种数据类型,分别是 只读访问模式读写访问模式

容器只读迭代器读写迭代器
Qlist<T>,Qqueue<T>QListIterator<T>QMutableListIterator<T>
QLinkList<T>QLinkListIterator<T>QMutableLinkListIterator<T>
Qvector<T>,Qstack<T>QVectorIterator<T>QMutableVectorIterator<T>
Qset<T>QSetIterator<T>QMutableSetIterator<T>
Qmap<Key,T>,QMultiMap<Key,T>QMapIterator<Key,T>QMutableMapIterator<Key,T>
Qhash<Key,T>,QMultiHash<Key,T>QHashIterator<Key,T>QMutableHashIterator<Key,T>

java风格容器类实例:

#include <QCoreApplication>
#include <QDebug>
#include <QList>
#include <QListIterator>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QList<QString>list;
    list<<"123"<<"456"<<"789";
    QListIterator<QString>m(list);
    while (m.hasNext()) {
        qDebug()<<m.next();

    }

    qDebug()<<"******";

    while(m.hasPrevious())
    {
        qDebug()<<m.previous();
    }
    return a.exec();
}

运行结果:



foreach关键字:

使用foreach关键字访问迭代器

格式:foreach(变量,容器)

注意:foreach关键字不是C++标准提供的,而是由Qt提供的。

实例:

#include <QCoreApplication>
#include <QDebug>
#include <QList>
#include <QListIterator>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QList<QString>list;
    list<<"123"<<"456"<<"789";

    QString str;

    foreach (str, list) {
        qDebug()<<str;
    }
    return a.exec();
}

运行结果:



各个容器类提供的函数,可以通过查看Qt Assistant获取。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐