Qt: 容器類和迭代器類、foreach關鍵字
阿新 • • 發佈:2019-01-23
引言:
容器類和迭代器類提供 刪除、修改、插入和儲存資料的功能。
這兩種類可以將各種資料型別的資料以元素為單位進行儲存。
例如:
不使用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獲取。