转自:http://www.hellotongtong.com/Qt5base1/qt-iterator-intro.html
4.4 迭代器
***【免费下载源码和PPT课件】***
***【在线视频课程(csdn)】***
***【在线视频课程(51cto)】***
4.4 迭代器
对于每种容器都有两种风格的迭代器——java风格和STL风格。
Java风格的更易于使用而以很少量性能作为了代价,而STL风格的可以结合STL的算法从而更加强大。
这里我们主讲QList和QMap的迭代器为例。
Java-Style
Java风格的迭代器分为两种:只读迭代器,读写迭代器。
只读迭代器就是Q*Iterator<T> (例如QVectorIterator<T>),
而读写迭代器则像QMutable*Iterator<T>这种(例如:QMutableVectorIterator<T>)。
下面是一个典型的使用例子:
QList<QString> list;
list << "A" << "B" << "C" << "D";
QListIterator<QString> i(list);
while (i.hasNext())
qDebug() << i.next();
下面是Mutable iterator读写迭代器使用说明:
QList<int>移除基数项:
QMutableListIterator<int> i(list);
while (i.hasNext()) {
if (i.next() % 2 != 0)
i.remove();
}
下面是QMap的迭代器示例,用法和前面是类似的:
QMap<QString, QString> map;
map.insert("Paris", "France");
map.insert("Mexico City", "Mexico");
map.insert("Moscow", "Russia");
QMutableMapIterator<QString, QString> i(map);
while (i.hasNext()) {
if (i.next().key().endsWith("City"))
i.remove();
}
QMap<int, QWidget *> map;
QHash<int, QWidget *> hash;
QMapIterator<int, QWidget *> i(map);
while (i.hasNext()) {
i.next();
hash.insert(i.key(), i.value());
}
STL-Style
STL风格是迭代器不仅支持Qt的通用算法,还兼容STL的。
和java风格的类似,它也有两种风格的迭代器,只读的(const_iterator)和读写的(iterator)。
用过c++ STL库的就对此很容易上手。
下面是QListIterator的例子:
QList<QString> list;
list << "A" << "B" << "C" << "D";
QList<QString>::iterator i;
for (i = list.begin(); i != list.end(); ++i)
*i = (*i).toLower();
STL风格的迭代器可允许的位置与java风格的有所不同
好文章,来自【福优学苑@音视频+流媒体】
***【免费下载源码和PPT课件】***
***【在线视频课程(csdn)】***
***【在线视频课程(51cto)】***