• 8959阅读
  • 3回复

QMapIterator的问题 [复制链接]

上一主题 下一主题
离线gzfreeman
 
只看楼主 倒序阅读 楼主  发表于: 2010-06-22
这是我的一个测试程序

#include <QtCore/QCoreApplication>
#include <QDebug>

#include <QMap>
#include <QMapIterator>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QMap<QString,QString> map;
    map.insert("beijing","010");
    map.insert("shanghai","021");
    map.insert("guangzhou","020");
    map.insert("dsd","2324");
    map.insert("dddddd","0000");
    QMapIterator<QString,QString> i(map);
    while(i.hasNext()){
       
        qDebug()<< " " << i.peekNext().key() << " "<<i.next().value();
    }

    return a.exec();
}

不知道是我的编译问题还是怎样的问题,我用的是4.6.2 如果这样编译出来的话 只能显示当前数据-1的结果,即如果map.inert()有5条记录的话,则只能显示出4条,而且还报错 但如果把红色字那部分改成i.peekPrevious()的话可以显示出所有的记录,而且不报错,问题就在这里,不是应该用i.peekNext来迭代所有的数据的吗?但现在不仅少了记录而且还报错,不知道其原因,而且这个是书上的一个例子。
离线dbzhang800

只看该作者 1楼 发表于: 2010-06-22
引用楼主gzfreeman于2010-06-22 11:21发表的 QMapIterator的问题 :
这是我的一个测试程序
    while(i.hasNext()){  
        qDebug()<< " " << i.peekNext().key() << " "<<i.next().value();
    }


不清楚是否确实如你所说,是某本书上给出的写法。

至少Qt的manual中没这么写过,常规的写法应该是
  1.     while(i.hasNext()){  
  2.         i.next();
  3.         qDebug()<< " " << i.key() << " "<<i.value();
  4.     }



当然,你也可以这么写
  1.     while(i.hasNext()){  
  2.         qDebug()<< " " << i.peekNext().key() ;
  3.         qDebug()<< " "<<i.next().value();
  4.     }


这样一来,至少不会搞不清到 i.next() 和 i.peekNext() 哪个先执行的问题。

下面一个例子你可以试试看:

  1. #include <QtCore/QCoreApplication>
  2. #include <QtCore/QDebug>
  3. QString f1()
  4. {
  5.     qDebug()<<"from f1";
  6.     return "f1";
  7. }
  8. QString f2()
  9. {
  10.     qDebug()<<"from f2";
  11.     return "f2";
  12. }
  13. int main(int argc, char *argv[])
  14. {
  15.     QCoreApplication a(argc, argv);
  16.     qDebug()<<func1()<<func2();
  17.    return a.exec();
  18. }
离线dstorm
只看该作者 2楼 发表于: 2010-06-22
nice man ,dbzhang800
离线gzfreeman
只看该作者 3楼 发表于: 2010-06-23
谢谢1楼 加上 i.next(); 这个后就OK了 我看的那本书叫精通QT4编程, 里面关于QMapIterator的代码就像我贴出的那样
快速回复
限100 字节
 
上一个 下一个