一、概述
QList<QDialog> list;//錯誤(但在Qt5.8中未報錯)
QList<QDialog*> list;//正確
Qt容器類爲遍歷提供了2種方法:二、容器類 QList、QLinkedList、QVector
1. QList類
QList<QString> list;
{
QString str("Hello World.");
list<<str;
}
qDebug()<<list[0]<<"Hi";
輸出:"Hello World." Hi
2. QLinkedList
3. QVector
4. Java風格迭代器遍歷容器
QList<int> list;
list<<1<<2<<3<<4<<5;
QListIterator<int> i(list);
for(;i.hasNext();)
qDebug()<<i.next();
}
輸出1
2
3
4
5
例2,QList讀寫遍歷(使用QMutableListIterator()執行讀寫遍歷)
#include <QApplication>#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QList<int> list;//創建容器list
QMutableListIterator<int> i(list);//創建列表list的迭代器
for(int j = 0;j<10;++ j)//插入10個整數
i.insert(j);
for(i.toFront();i.hasNext();)//移動迭代點到表的前端,完成遍歷和輸出
qDebug()<<i.next();
for(i.toBack();i.hasPrevious();){//移動迭代點到表的後端,遇到偶數則刪除,遇到奇數修改爲10倍
if(i.previous()%2 == 0)
i.remove();
else
i.setValue(i.peekNext()*10);
}
for(i.toFront();i.hasNext();)
qDebug()<<i.next();
return a.exec();
}
輸出
0
1
2
3
4
5
6
7
8
9
10
30
50
70
90
5. STL風格迭代器遍歷容器
#include <QDebug>
int main(int argc,char *argv[])
{
QList<int> list;
for(int j=0;j<10;j++)
list.insert(list.end(),j);//在列表list之後插入十個整數
QList<int>::iterator i;
for(i=list.begin();i!=list.end();++i)//將STL風格列表i所有數值增大10倍
{
qDebug()<<(*i);
*i=(*i)*10;
}
QList<int>::const_iterator ci;
for(ci=list.constBegin();ci!=list.constEnd();++ci)//遍歷STL風格列表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
三、容器類QMap、QHash
1、QMap
2、QHash
3. Java風格迭代器遍歷容器
#include <QDebug>
int main(int argc,char *argv[])
{
QMap<QString,QString> map;
map.insert("beijing","111");
map.insert("shanghai","021");
map.insert("nanjing","025");
QMapIterator<QString,QString> i(map);
for(;i.hasNext();)
qDebug()<<" "<<i.key()<<" "<<i.next().value();//對i的遍歷輸出
QMutableMapIterator<QString,QString> mi(map);//在map中查找"111"並修改
if(mi.findNext("111"))
mi.setValue("010");
QMapIterator<QString,QString> modi(map);
qDebug()<<" ";
for(;modi.hasNext();)
qDebug()<<" "<<modi.key()<<" "<<modi.next().value();//再次遍歷輸出
return 0;
}
輸出: "beijing" "111"
"nanjing" "025"
"shanghai" "021"
"beijing" "010"
"nanjing" "025"
"shanghai" "021"
4. STL風格迭代器遍歷容器
對於每一個容器類,Qt都提供兩種類型的STL風格迭代器數據類型:#include <QDebug>
int main(int argc,char *argv[])
{
QMap<QString,QString> map;
map.insert("beijing","111");
map.insert("shanghai","021");
map.insert("nanjing","025");
QMap<QString,QString>::const_iterator i;
for(i=map.constBegin();i!=map.constEnd();++i)
qDebug()<<" "<<i.key()<<" "<<i.value();//遍歷容器i
QMap<QString,QString>::iterator mi;
mi=map.find("beijing");//查找"beijing"
if(mi!=map.end())
mi.value()="010";//修改值
QMap<QString,QString>::const_iterator modi;
qDebug()<<" ";
for(modi=map.constBegin();modi!=map.constEnd();++modi)
qDebug()<<" "<<modi.key()<<" "<<modi.value();//再次遍歷
return 0;
}