迭代器(iterator)为访问容器类里的数据项提供了统一的方法,Qt有两种迭代器类:Java类型的迭代器和STL类型的迭代器。
Java类型的迭代器更易于使用,且提供一些高级功能,而STL类型的迭代器效率更高。
Qt还提供一个关键字foreach(实际是<QtGlobal>里定义的一个宏)用于方便地访问容器里所有数据项。
1.JAVA类型迭代器
1.1 JAVA类型迭代器总表
对于每个容器类,有两个Java类型迭代器:一个用于只读操作,一个用于读写操作。
Map和QHash等关联容器类的迭代器用法相同,QList和QLinkedList、QSet等容器类的用
法相同,所以下面只以QMap和QList为例介绍迭代器的用法。Java类型的迭代器如表3-3所示。
Java类型迭代器的指针不是指向一个数据项,而是在数据项之间,迭代器指针位置示意图如图所示。
图1-1 JAVA类型迭代器位置示意图
1.2 顺序容器类的迭代器的使用
1.2.1 Java类型QList容器类迭代器
(1)QListIterator常用函数
QListIterator用于移动指针和读取数据的函数见表3-4。
(2)正向遍历QList<QString>容器所有数据
QList<QString>容器对象list作为参数传递给QListlterator<QString>迭代器i的构造函数,i
用于对list作只读遍历。起始时刻,迭代器指针在容器第一个数据项的前面(图1-1中数据项"A”
的前面),调用hasNext()判断在迭代器指针后面是否还有数据项,如果有,就调用next()跳过一个
数据项,并且next()函数返回跳过去的那个数据项。
QList<QString>list;list<<"A"<<"B"<<"C"<<"D";QListIterator<QString>i(list);while(i.hasNext())qDebug()<<i.next();
(2)反向遍历QList<QString>容器所有数据
QListIterator<QString>i(list);i.toBack();while(i.hasprevious())