QTL 详解二------迭代器
Java类型迭代器
Java类型迭代器不是指向数据项,而是在数据项之间,如图:
注意:
Java类型的迭代器是指向数据项之间的,每次使用next()函数时,迭代器是先跳到下一对数据项之间,再返回跳过的数据项的值,供于下面的操作的。如图:
顺序容器:
//JAVA类型迭代器
//只读
QListIterator<QString> i(s);
//for循环
for (; i.hasNext();)
{
qDebug() << i.next();
}
i.toFront();
//while
while (i.hasNext())
{
qDebug() << i.next();
}
//读写
QMutableListIterator<QString> o(s);
o.toFront();
for (; o.hasNext();)
{
o.next(); //这里的o.next要和setvalue交换位置,因为,JAVA迭代器是从前面开始的,就是先next跳过这一项并返回跳过的这一项的值,用以下面的操作
o.setValue("帅");
}
o.toFront();
while (o.hasNext())
{
qDebug() << o.next();
}
关联容器:
//JAVA迭代器
//只读
QMapIterator<int, QString> k(map);
for (; k.hasNext();)
{
k.next();
qDebug() << k.key() << k.value();
}
STL类型迭代器
STL类型的迭代器是数组指针,并且是直接指向数据项的与Java的不同,所以“++”运算符可以使迭代器指向下一个数据项,“*”运算符可以返回数据项的内容。
注意:在定义只读迭代器和读写迭代器时,他们使用的是不同的关键字,此外还可以使用const_reverse_iterator和reverse_iterator定义相应的反向迭代器。
常用函数:
函数 作用
begin() [用于读写迭代器]使迭代器指向容器的第一个数据项
end() [用于读写迭代器]使迭代器指向一个虚拟的表示结尾的数据项
constBegin() [用于只读迭代器]表示起始位置
constEnd() [用于只读迭代器]表示结束位置
rbegin() [用于反向读写/只读迭代器]表示起始位置
rend() [用于反向读写/只读迭代器]表示结束位置
顺序容器:
//STL类型迭代器
//只读
QList<QString>::const_iterator m;
for (m = s.constBegin(); m != s.constEnd(); m++)
{
qDebug() << *m;
}
//读写
QList<QString>::iterator n;
for (n = s.begin(); n != s.end(); n++)
{
*n = "牛";
qDebug() << *n;
}
关联容器:
//STL迭代器
//只读
QMap<QString, int>::const_iterator cmp;
for (cmp = city_zone.constBegin(); cmp != city_zone.constEnd(); cmp++)
{
qDebug() << cmp.key() << cmp.value();
}
区别
两者比较,Java 类型的迭代器更易于使用,且提供一些高级功能,而 STL 类型的迭代器效率更高。
java风格迭代器是指向项目之间的,而不是直接指向项目。所以迭代器要么指向容器的最前面,或者指向两个项目之间,或者指向容器的最后面。
java风格迭代器方便很多,但性能稍微弱于STL。
STL迭代器兼容Qt 和 STL的通用算法,而且在速度上进行了优化。
STL风格迭代器API模仿了数组的指针,例如用 “ ++ ” 来后移迭代器使其指向下一个项目,使用 “ * ”操作符返回迭代器指向的项目等。 不同与java风格,STL风格迭代器是直接指向项目的。
这两种风格的迭代器都有提供 “只读” 和 ”读写“ 两种类型。
在STL风格迭代器中 “++” 和 “–” 操作符可以作为前缀也可以作为后缀,当作为前缀时会先修改迭代器,然后返回修改后的迭代器的一个引用。作为后缀时,在修改迭代器前会对其进行复制,然后返回这个复制。
如果表达式中不对返回值进行处理,那么最好使用前缀操作符 (++i ,–i )这样会更快一些。
QTL 详解二------迭代器相关推荐
- 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)
Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...
- [转]文件IO详解(二)---文件描述符(fd)和inode号的关系
原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...
- PopUpWindow使用详解(二)——进阶及答疑
相关文章: 1.<PopUpWindow使用详解(一)--基本使用> 2.<PopUpWindow使用详解(二)--进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...
- Android init.rc文件解析过程详解(二)
Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...
- linux 进程间通信 dbus-glib【实例】详解二(下) 消息和消息总线(ListActivatableNames和服务器的自动启动)(附代码)
linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...
- linux 进程间通信 dbus-glib【实例】详解二(上) 消息和消息总线(附代码)
linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...
- Android Gradle 自定义Task详解二:进阶
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...
- Android Loader 异步加载详解二:探寻Loader内部机制
Android Loader 异步加载详解二:探寻Loader内部机制 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/7025991 ...
- EXT核心API详解(二)-Array/Date/Function/Number/String
EXT核心API详解(二)-Array/Date/Function/Number/String Array类 indexOf( Object o ) Number object是否在数组中,找不到返 ...
最新文章
- YourEclipse—不只是Eclipse开发者社区
- Unity shader学习之屏幕后期处理效果之高斯模糊
- MySQL【问题记录 01】报错 1709 - Index column size too large. The maximum column size is 767 bytes. 可能是最简单的方法
- 通过python 爬取网址url 自动提交百度
- mahout学习笔记4
- python建立列表并输入_python操作列表
- android html转pdf工具,android – 使用iText库将html转换为pdf时未应用hr的内联CSS
- SQL Server 数据库中的 MD5 和 SHA1
- 互联网上,极致才能成功
- Linux系统配置jdk环境变量
- 计算机硬件配置及安装,电脑硬件及电脑配置知识大全
- 2018产品经理都在入驻的平台——汇新云
- 汽车CAN通信基础知识-CAN数据结构
- # TIG监控体系搭建
- [bzoj1226]学校食堂Dining
- 软件项目投标标书规范格式
- 【LeetCode】40. 组合总和 II (JavaScript)
- 【python】pygame实现植物大战僵尸小游戏(附源码 有注释)
- WebRtc以Trickle ICE形式去进行pair
- 不愧是阿里P8!深入理解Java虚拟机pdf百度云
热门文章
- 人体传感器好不好用?怎么用?Aqara绿米、小米之间到底买哪个
- 【数据库-MySql】[Err] 1062 - Duplicate entry '1-1' for key 'PRIMARY'
- Adobe国际认证 Illustrator CC 考试学习指南
- mysql+存key+value_Friendfeed的MySQL key/value存储
- Sinfor AC 配置详解
- hdoj_4417Super Mario
- 职称考试计算机怎么学容易,职称计算机考试过关必读的9大技巧
- c++ 给枚举类型设置基础类型
- AJAX调试技术 IE篇
- 赶集网招聘信息数据分析与可视化辑器