如何在Qt中使用java风格的迭代器而不是stl风格

How to use java-style iterators instead stl-style in the Qt?

本文关键字:风格 迭代器 stl java Qt      更新时间:2023-10-16

例如:

QList<QMap<QString,QString> > list
QList<QMap<QString,QString> >::iterator i;
    for (i = list.begin(); i != list.end(); ++i)
    {
        QMap<QString,QString>::iterator j;
        for (j = i->begin(); j != i->end(); ++j)
            qDebug() << j.key() << ": " << j.value() << endl;
    }

所以这种 stl 风格正在起作用。但是我不能重写为java风格:

   QListIterator<QMap<QString,QString> > i(list);
    while (i.hasNext())
    {
        QMapIterator<QString,QString> j(i); //error 
        while (j.hasNext()) {
            j.next();
            qDebug() << j.key() << ": " << j.value() << endl;
        }
    }

在这里我得到错误 - cannot convert parameter 1 from QListIterator<T>' to 'const QMap<Key,T>

使用 java 样式迭代器时,您需要获取下一项,如下所示:

 QMapIterator<QString,QString> j(i.next()); //no error