QT中的容器遍历
Qt 的容器类提供了两种风格的遍历器:Java 风格和 STL 风格。
Java 风格的遍历器
Java 风格的遍历器是在 Qt4 首先引入的,是 Qt 应用程序首先推荐使用的形式。这种风格比起 STL 风格的遍历器更方便。方便的代价就是不如后者高效。
Java 风格的遍历器指向的是两个元素之间的位置,而不是指向元素本身。因此,它们可能会指向集合第一个元素之前的位置,也可能指向集合的最后一个元素之后的位置,
每一种容器都有两种 Java 风格的遍历器:一种提供只读访问,一种提供读写访问:
容器 | 只读遍历器 | 读写遍历器 |
QList,QQueue | QListIterator | QMutableListIterator |
QLinkedList | QLinkedListIterator | QMutableLinkedListIterator |
QVector,QStack | QVectorIterator | QMutableVectorIterator |
QSet | QSetIterator | QMutableSetIterator |
QMap,QMultiMap | QMapIterator | QMutableMapIterator |
QHash,QMultiHash | QHashIterator | QMutableHashIterator |
QLinkedList、QVector和QSet的遍历器接口与QList的是一样的;QHash遍历器的接口则同QMap是一样的。
我们通过下面的代码看看如何使用这种遍历器:
点击(此处)折叠或打开
- QList<QString> list;
- list << "A" << "B" << "C" << "D";
- QListIterator<QString> i(list);
- while (i.hasNext()) {
- qDebug() << i.next();
- }
如果需要修改操作,我们可以使用QMutableListIterator。来看下面的代码:
点击(此处)折叠或打开
- QMutableListIterator<int> i(list);
- while (i.hasNext()) {
- if (i.next() == “B”) {
- i.setValue(“b”); //i.next()="b";
- }
- }
QMapItrator也是类似的。例如,
点击(此处)折叠或打开
- QMap<int, QString> map;
- map.insert(1,"A");
- map.insert(2,"B");
- map.insert(3,"C");
- QMapIterator<int, QString> i(map);
- while (i.hasNext()) {
- if(i.next().key() == 2)
- qDebug() << i.value();
- }
STL 风格的遍历器
STL 风格的遍历器从 Qt 2.0 就开始提供。这种遍历器能够兼容 Qt 和 STL 的通用算法,并且为速度进行了优化。同 Java 风格遍历器类似,Qt 也提供了两种 STL 风格的遍历器:一种是只读访问,一种是读写访问。我们推荐尽可能使用只读访问,因为它们要比读写访问的遍历器快一些。
容器 | 只读遍历器 | 读写遍历器 |
QList,QQueue | QList::const_iterator | QList::iterator |
QLinkedList | QLinkedList::const_iterator | QLinkedList::iterator |
QVector,QStack | QVector::const_iterator | QVector::iterator |
QSet | QSet::const_iterator | QSet::iterator |
QMap,QMultiMap | QMap::const_iterator | QMap::iterator |
QHash,QMultiHash | QHash::const_iterator | QHash::iter |
不同于 Java 风格遍历器,STL 风格遍历器直接指向元素本身。
下面是有关QList的相关代码:
点击(此处)折叠或打开
- QList<QString> list;
- list << "A" << "B" << "C" << "D";
- QList<QString>::iterator i;
- for (i = list.begin(); i != list.end(); ++i) {
- *i = (*i).toLower(); // 使用 * 运算符获取遍历器所指的元素
- qDebug()<<*i;
- }
QMap和QHash的遍历器,* 运算符返回集合键值对。下面的代码,我们打印出QMap的所有元素:
点击(此处)折叠或打开
- QMap<int, int> map;
- QMap<int, int>::const_iterator i;
- for (i = map.constBegin(); i != map.constEnd(); ++i) {
- qDebug() << i.key() << ":" << i.value();
- }
foreach关键字
如果我们仅仅想要遍历集合所有元素,我们可以使用 Qt 的foreach关键字。这个关键字是 Qt 特有的,
例如,我们使用foreach对QLinkedList进行遍历:
点击(此处)折叠或打开
- QLinkedList<QString> list;
- ...
- QString str;
- foreach (str, list) {
- qDebug() << str;
- }
相关文章
- QT-Qt组件QTimer使用方法
- QT-在Qt Widgets Application中怎么显示printf的输出内容?
- QT-QT版本下载与解释
- s3c2410上搭建QT/Embedded4.8.5开发环境(七)--命令行开始第一个Qt程序
- Qt编写安防视频监控系统58-子模块2窗口信息
- Qt编写地图综合应用19-地图服务
- Qt对象线程安全
- Qt QSignalMapper(信号映射器)
- Qt OpenGL 纹理映射
- Qt 关于QT_BEGIN_NAMESPACE宏的作用
- Qt使用拖放
- Qt多线程编程之线程池
- Qt多线程的使用
- 使用Qt和Interpreter设计模式开发计算器
- Qt开发-QT Widgets
- 1、QT基础——Qt概述
- Qt输出打印信息的日志到文件(两种方式)
- 解决Ubuntu系统安装QT出错的问题:qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in ““ even though it
- Qt 开源项目收集大全
- C++/Qt:TXT文件读写
- QT项目中显示中文
- Qt学习一门:直接使用QT具
- Qt 添加 QtNetwork 库文件
- qt 定义插件