1.简介
STL风格迭代器兼容Qt和STL的通用算法,而且再速度上进行了优化。每一个容器都有两个STL风格迭代器类型:一个提供了只读访问,另一个提供了读/写访问。
2.使用示例
#include <QCoreApplication>
#include <QList>
#include <QDebug>
#include <QMap>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<QString> list;
list << "A" << "B" << "C" << "D";
QList<QString>::iterator i; // 使用读写迭代器
qDebug() << "the forward is :";
for (i = list.begin(); i != list.end(); ++i) {
*i = (*i).toLower(); // 使用QString的toLower()函数转换为小写
qDebug() << *i; // 结果为a,b,c,d
}
qDebug() << "the backward is :";
while (i != list.begin()) {
--i;
qDebug() << *i; // 结果为d,c,b,a
}
QList<QString>::const_iterator j; // 使用只读迭代器
qDebug() << "the forward is :";
for (j = list.constBegin(); j != list.constEnd(); ++j)
qDebug() << *j; // 结果为a,b,c,d
QMap<QString, int> map;
map.insert("one",1);
map.insert("two",2);
map.insert("three",3);
QMap<QString, int>::const_iterator p;
qDebug() << "the forward is :";
for (p = map.constBegin(); p != map.constEnd(); ++p)
qDebug() << p.key() << ":" << p.value();// 结果为(one,1),(three,3),(two,2)
return a.exec();
}
执行效果:
3.详细说明
STL风格迭代器的API模仿了数组的指针,
- 使用“++”操作来向后移动迭代器使其指向下一个项目
- 使用“*”操作符返回迭代器指向的项目
注意:
不同于Java风格迭代器,STL风格迭代器是直接指向项目的。
begin()
函数返回了一个指向该容器中第一个项目的迭代器,end()
函数也返回一个迭代器,但是这个迭代器指向该容器最后一个项目的下一个假想的虚项目。