一、概述
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;
}