1. 程式人生 > >Qt: 容器類和迭代器類、foreach關鍵字

Qt: 容器類和迭代器類、foreach關鍵字

引言:

容器類和迭代器類提供 刪除、修改、插入和儲存資料的功能。

這兩種類可以將各種資料型別的資料以元素為單位進行儲存。

例如:

不使用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獲取。