Qt java类型容器类的迭代
程序员文章站
2022-06-17 08:01:00
...
Qt中的两种迭代器类:
- Java类型迭代器
- STL 类型迭代器
Java类型的迭代器分为只读操作迭代器和读写操作迭代器;迭代器的指针不是指向一个数据项,而是在数据项之间。
例:
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<QString> list;
list.append("A");
list.append("B");
list.append("C");
list.append("D");
QListIterator<QString> i(list);
while (i.hasNext()) {
qDebug()<<i.next();
}
return a.exec();
}
输出的结果为:
“A”
“B”
“C”
“D”
QList容器对象list作为参数传递给QListIterator迭代器i的构造函数,i用于list作只读遍历。起始时刻,迭代器指针在容器第一个数据项的前面,调用hasNext()判断迭代器指针后面是否还有数据项,如果有,就调用next()跳过一个数据项,并且next()函数返回跳过去的那个数据项。
也可以反向遍历:
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<QString> list;
list.append("A");
list.append("B");
list.append("C");
list.append("D");
QListIterator<QString> i(list);
i.toBack();
while (i.hasPrevious()) {
qDebug()<<i.previous();
}
return a.exec();
}
输出的结果为:
“D”
“C”
“B”
“A”
QListIterator用于移动指针和读取数据的函数有以下几种:
函数名称 | 功能 |
---|---|
void toFront() | 迭代器移动到列表的最前面,即第一个数据项之前 |
void toBack() | 迭代器移动到列表的最后面,即最后一个数据项之后 |
boolhasNext() | 如果迭代器不是位于列表的最后位置,返回true |
const T & next() | 返回下一个数据项,并且迭代器后移一个位置 |
const T & peekNext() | 返回下一个数据项,但是不移动迭代器位置 |
bool hasPrevious() | 如果迭代器不是位于列表的最前面,返回true |
const T & previous() | 返回前一个数据项,并且迭代器前移一个位置 |
const T & peekPrevious() | 返回前一个数据项,但是不移动迭代器指针 |
QListIterator是只读访问容器内数据项的迭代器,若要在遍历过程中对容器中的数据项进行修改,需要使用QMutableListIterator:
QList<int> list2;
list2<<1<<2<<3<<4<<5;
QMutableListIterator<int> i2(list2);
while (i2.hasNext()) {
if(i2.next() % 2 !=0)
i2.remove();
qDebug()<<i2.next();
}
remove()函数移动next()函数刚刚跳过的一个数据项,不会使迭代器失效;
setValue()函数可以修改刚刚跳过去的数据项的值。
关联容器迭代器的使用:
QMap<Key,T>可以使用QMapIterator和QMutableMapIterator迭代器类。相比于上表中的函数额外增加了key()和value()函数用于获取刚刚跳过的数据项的键和值。
例:
#include <QCoreApplication>
#include <QMap>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QMap<QString,QString> map;
map.insert("Paris","France");
map.insert("New York","USA");
map.insert("Mexico City","USA");
map.insert("Moscow","Russia");
QMutableMapIterator<QString,QString> i(map);
while (i.hasNext()) {
if(i.next().key().endsWith("city"))
i.remove();
qDebug()<<i.key()<<":"<<i.value();
}
return a.exec();
}
程序的输出结果为:
“Mexico City” : “USA”
“Moscow” : “Russia”
“New York” : “USA”
“Paris” : “France”
上一篇: Maven了解 待续更。。
下一篇: 快速了解Maven Life Cycle