关于iterator的一个问题

大风哉 2017-12-27 10:24:17
对于iterator,有下面这样的代码

QMap<QString, QString> map;
map.insert("bejing", "111");
map.insert("shanghai", "222");
map.insert("ningbo", "333");
map.insert("guangzhou", "444");
QMap<QString, QString>::const_iterator i;
for(i=map.constBegin(); i != map.constEnd(); ++i)
{
qDebug() << i.key() << " " << i.value();
}


对于for循环部分当i遍历到最后一个时, i == map.constEnd(),这时候就跳出循环了吧,那这样的话最后一个就不能去打印了,这样不是把最后一个漏掉了吗?
...全文
342 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jue_Xin 2017-12-30
  • 打赏
  • 举报
回复
可以这样 QMap<QString, QString> map; map.insert("bejing", "111"); map.insert("shanghai", "222"); map.insert("ningbo", "333"); map.insert("guangzhou", "444"); QMap<QString, QString>::const_iterator i; while(i.hasNext()) { i.next(); i.key(); i.value(); }
Jue_Xin 2017-12-30
  • 打赏
  • 举报
回复
这和c++容器一样,end是最后一个的下一个
VTTTTT 2017-12-29
  • 打赏
  • 举报
回复
vs的黄色小箭头指的是 即将执行此行,而不是执行完毕。因此要跳到i++的下一行,i++才算是已执行
大风哉 2017-12-28
  • 打赏
  • 举报
回复
引用 1 楼 VTTTTT 的回复:
map.end()指向的不是map的最后一项,而是最后一项的下一项,指向一个未知的值,相当于一个未初始化的指针。 楼主可以写一条iter=map.end()语句,调试看看就知道了 1楼的循环语句,也可以类比为 list的 for(int i = 0; i < list.size(); i++) ,逻辑是一样的
确实是这样的。 另外在用vs调试时,在变量监视栏里添加i来观察它的值。在执行过程中,for循环的i++后 值不会立即改变,而是要执行到大括号里面监视栏里的i才会变,这是什么原因?
VTTTTT 2017-12-28
  • 打赏
  • 举报
回复
map.end()指向的不是map的最后一项,而是最后一项的下一项,指向一个未知的值,相当于一个未初始化的指针。 楼主可以写一条iter=map.end()语句,调试看看就知道了 1楼的循环语句,也可以类比为 list的 for(int i = 0; i < list.size(); i++) ,逻辑是一样的

16,213

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧