• 4837阅读
  • 9回复

[共享]发现:Qt的容器类可用于基于范围的for循环 [复制链接]

上一主题 下一主题
离线呆呆很呆
 
只看楼主 倒序阅读 楼主  发表于: 2013-03-29
— 本帖被 XChinux 从 Qt安装与发布 移动到本区(2013-03-29) —
关键词: C++QList
大家知道Qt提供了一个用于循环的foreach,但也有局限性 比如不能修改
C++11提供了一个基于范围的for循环 发现可以把他用于Qt的容器类
  1. #include <QtCore>
  2. int main()
  3. {
  4.         QList<int> list;
  5.         list<<1<<2<<3<<4;
  6.         for(auto &x:list){x+=1;}
  7.         for(auto x:list){qDebug()<<x; x=3;/*不应修改的修改测试*/}
  8.         for(auto x:list){qDebug()<<x;}
  9.         return 0;
  10. }

输出:
  1. 2
  2. 3
  3. 4
  4. 5
  5. 2
  6. 3
  7. 4
  8. 5


不错吧

离线XChinux

只看该作者 1楼 发表于: 2013-03-29
这个C++11 的auto for确实好用。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线roywillow

只看该作者 2楼 发表于: 2013-03-29
那QHash、QMap之类的……会是怎么访问和修改的呢?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线呆呆很呆
只看该作者 3楼 发表于: 2013-03-29
回 2楼(roywillow) 的帖子
这个不行吧 好像是通过begin和end函数来访问的 然后operator*来访问 于是访问的是T而不是Key
离线呆呆很呆
只看该作者 4楼 发表于: 2013-03-29
回 2楼(roywillow) 的帖子
所以不能访问Key

不过根据这个原理能访问T 我去写代码试试
离线呆呆很呆
只看该作者 5楼 发表于: 2013-03-29
  1. #include <QtCore>
  2. int main()
  3. {
  4.         QMap<int,int> map;
  5.         map.insert(1,0);
  6.         map.insert(2,1);
  7.         map.insert(3,2);
  8.         map.insert(4,3);
  9.         for(auto &i:map){qDebug()<<i;++i;}
  10.         qDebug()<<map;
  11.         return 0;
  12. }

输出:
  1. 0
  2. 1
  3. 2
  4. 3
  5. QMap((1, 1)(2, 2)(3, 3)(4, 4))

离线roywillow

只看该作者 6楼 发表于: 2013-03-29
回 5楼(呆呆很呆) 的帖子
看样子只能得到value,得不到key?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线呆呆很呆
只看该作者 7楼 发表于: 2013-03-30
回 6楼(roywillow) 的帖子
你可以写个类继承QMap 然后重写begin和end 使其返回你定义的Iterator

你定义的Iterator继承QMap::iterator 然后重写operator* 使其返回pair或者数组 应该可以实现 不过没这个必要 还不如用QMap::iterator+while循环实现
离线彩阳

只看该作者 8楼 发表于: 2013-03-30
Qt5的新功能?
上海Qt开发联盟,热忱地欢迎你的加入!
离线roywillow

只看该作者 9楼 发表于: 2013-03-30
回 8楼(彩阳) 的帖子
应该算是c++11的新特性吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个