QT学习笔记(九):遍历容器-迭代器(iterators)

QT学习笔记(九):遍历容器-迭代器(iterators)

      • 遍历容器 :
        • 1、Jave风格:
        • 2、STL风格:
        • 3、foreach 关键字:

遍历容器 :

遍历一个容器可以使用迭代器(iterators)完成,迭代器提供一个统一的方法来访问容器中的项目。
迭代器:Jave风格、STL(标准模板库(Standard Template Library))风格;当容器中的数据被修改后或由于调用了non-const成员函数导致其脱离了隐式共享,那么这两种迭代器都会失效。

两者比较:
Jave较STL使用方便,但性能上较弱与后者。
Jave风格迭代器:只读访问、读写访问;

1、Jave风格:

在这里插入图片描述
QList 迭代器示例:

#include <QCoreApplication>
#include <QList>
#include <QListIterator>
#include <QMutableListIterator>
#include <QDebug>
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QList<QString> list;list << "A" << "B" << "C" << "D";// 创建列表的只读迭代器,将list作为参数QListIterator<QString> i(list); 			qDebug() << "the forward is :";while (i.hasNext())             			// 正向遍历列表,结果为A,B,C,DqDebug() << i.next();qDebug() << "the backward is :";while (i.hasPrevious())         			// 反向遍历列表,结果为D,C,B,AqDebug() << i.previous();// 创建列表的读写迭代器,将list作为参数QMutableListIterator<QString> j(list);j.toBack();                                // 返回列表尾部while (j.hasPrevious()) {QString str = j.previous();if(str == "B") j.remove();             // 删除项目“B”}j.insert("Q");                             // 在列表最前面添加项目“Q”j.toBack();if(j.hasPrevious()){j.previous() = "N";    				   // 直接赋值}j.previous();							   // 返回前一个项目,并回移一格j.setValue("M");                           // 使用setValue()进行赋值j.toFront();qDebug()<< "the forward is :";while (j.hasNext())                        // 正向遍历列表,结果为Q,A,M,NqDebug() << j.next();return a.exec();
}

运行结果:
在这里插入图片描述
在这里插入图片描述
QMap 迭代器示例:

#include <QCoreApplication>
#include <QMapIterator>
#include <QMutableMapIterator>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QMap<QString, QString> map;map.insert("Paris", "France");map.insert("Guatemala City", "Guatemala");map.insert("Mexico City", "Mexico");map.insert("Moscow", "Russia");// 创建Map的只读迭代器,将map作为参数QMapIterator<QString,QString> i(map);while(i.hasNext()) 									// 正向遍历 map{i.next();qDebug() << i.key() << " : " << i.value();}if(i.findPrevious("Mexico")) {qDebug() << "find 'Mexico'";  					// 向前查找键的值}// 创建Map的读/写迭代器,将map作为参数QMutableMapIterator<QString, QString> j(map);while (j.hasNext()) {if (j.next().key().endsWith("City")) 			// endsWith()是QString类的函数j.remove();                      			// 删除含有“City”结尾的键的项目}while(j.hasPrevious()) {j.previous();          							// 现在的键值对为 (paris,France),(Moscow,Russia)qDebug() << j.key() << " : " << j.value();}return a.exec();
}

运行结果:
在这里插入图片描述

2、STL风格:

STL 风格迭代器兼容Qt和STL的通用算法,在速度上进行了优化:
在这里插入图片描述
QList 和QMap 综合STL 风格迭代器示例:

#include <QCoreApplication>
#include <QList>
#include <QDebug>
#include <QMap>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QList<QString> list;list << "A" << "B" << "C" << "D";// 使用读写迭代器QList<QString>::iterator i;      					qDebug() << "the forward is :";for (i = list.begin(); i != list.end(); ++i) {*i = (*i).toLower();         					// 使用QString的toLower()函数转换为小写qDebug() << *i;              					// 结果为a,b,c,d}qDebug() << "the backward is :";while (i != list.begin()){--i;qDebug() << *i;               					// 结果为d,c,b,a}// 使用只读迭代器QList<QString>::const_iterator j; 					qDebug() << "the forward is :";for (j = list.constBegin(); j != list.constEnd(); ++j)qDebug() << *j;               					// 结果为a,b,c,d// QMap STL 风格迭代器使用QMap<QString, int> map;map.insert("one",1);map.insert("two",2);map.insert("three",3);QMap<QString, int>::const_iterator p;qDebug() << "the forward is :";for (p = map.constBegin(); p != map.constEnd(); ++p)qDebug() << p.key() << ":" << p.value();		// 结果为(one,1),(three,3),(two,2)return a.exec();
}

运行结果:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、foreach 关键字:

如果你只是想顺序的变量容器中的所以元素,可以使用Qt的foreach关键字。这个关键字是Qt特定的,是使用预处理器实现的。
它的语法是:

foreach(variable, container) statement;

例如,下面的代码说明了怎么使用foreach来迭代QLinkedList:

QLinkedList<QString> list;...
QString str;
foreach (str, list)qDebug() << str;

QList 和QMap foreach 遍历示例:

#include <QCoreApplication>
#include <QList>
#include <QMap>
#include <QMultiMap>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QList<QString> list;list.insert(0, "A");list.insert(1, "B");list.insert(2, "C");qDebug() <<"the list is :";foreach (QString str, list)				// 从list中获取每一项{   qDebug() << str;            		// 结果为A,B,C}QMap<QString,int> map;map.insert("first", 1);map.insert("second", 2);map.insert("third", 3);qDebug() << endl << "the map is :";foreach (QString str, map.keys())   	// 从map中获取每一个键   qDebug() << str << " : " << map.value(str); 	// 输出键和对应的值,结果为(first,1),(second,2),(third,3)QMultiMap<QString,int> map2;map2.insert("first", 1);map2.insert("first", 2);map2.insert("first", 3);map2.insert("second", 2);qDebug() << endl << "the map2 is :";QList<QString> keys = map2.uniqueKeys();	 			// 返回所有键的列表foreach (QString str, keys) 							// 遍历所有的键{            				foreach (int i, map2.values(str))    				// 遍历键中所有的值qDebug() << str << " : " << i;}// 结果为(first,3),(first,2),(first,1),(second,2)return a.exec();
}

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT学习笔记(十):通用算法示例

QT学习笔记&#xff08;十&#xff09;&#xff1a;通用算法示例 std是C标准库统一使用的命名空间(namespace)的名称&#xff0c;C标准库中的名字全部都在std这个命名空间中,std也就是英文"standard"&#xff08;标准&#xff09;的缩写。 #include <QCoreAppl…

了解因果论:从珀尔的《为什么》开始

图I&#xff1a;AI从达特茅斯会议&#xff08;1956年&#xff09;得名至今已有六十年&#xff0c;期间几起几落&#xff0c;群星璀璨&#xff0c;像一个大舞台&#xff0c;你方唱罢我登场&#xff0c;留下了一些永载史册的理论和成就&#xff0c;但涉及因果的甚少作者&#xff…

外观模式(三层解耦)

说到外观模式&#xff0c;很容易想到的是设计一件漂亮的衣服然后穿上自己的身上&#xff0c;让自己看起来更加的漂亮&#xff0c;但是这个可能并不是这样子的&#xff0c;从更深层次的来说&#xff0c;外观更应该是所见即所得的&#xff0c;对于观众来说&#xff0c;看起来可能…

QT学习笔记(十一):QString类

QT学习笔记&#xff08;十一&#xff09;&#xff1a;QString类1、概述2、编辑操作3、查询操作3、转换操作1、概述 1.1 QString 类是 Qt 中用于表示字符串的类&#xff0c;实现在 QtCore 共享库中。QString 类在实现上有以下特征: 1&#xff09;字符串采用 Unicode 内部编码&…

人工智能六十年技术简史

作者 | 李理出品 | AI科技大本营&#xff08;rgznai100&#xff09;人类的进化发展史就是一部人类制造和使用工具的历史&#xff0c;不同的工具代表了人类的进化水平。从石器时代、铁器时代、蒸汽时代、电气时代再到现在的信息时代&#xff0c;我们使用更加先进便捷的工具来改变…

QT学习笔记(十二):透明窗体设置

QT学习笔记&#xff08;十二&#xff09;&#xff1a;透明窗体设置 创建 My_Widget 类 基类为QWidget &#xff0c; My_Widget.cpp 源文件中添加代码 #include "widget.h" #include "ui_widget.h"#include <QGraphicsDropShadowEffect>// 构造函数…

【新书】崛起的超级智能:互联网大脑如何影响科技未来

来源&#xff1a;刘锋的未来课堂2019年7月&#xff0c;《崛起的超级智能&#xff1a;互联网大脑如何影响科技未来》由中信出版社正式出版。作者刘锋。吕乃基、石勇、吕本富做序。张亚勤、刘慈欣、周鸿祎、王飞跃、约翰.翰兹等专家为这本书撰写了推荐语。《崛起的超级智能》主要…

OpenCV学习笔记(一):Win10(x64)+Qt5.8(MSVC2013)+OpenCV3.1.0配置过程

OpenCV学习笔记&#xff08;一&#xff09;&#xff1a;Win10(x64)Qt5.8(MSVC2013)OpenCV3.1.0配置过程 Win10(x64)Qt5.8(MSVC2013)OpenCV3.1.0配置过程 配置需求 原版 Win10(x64) Qt5.8(MSVC2013) OpenCV3.1.0 第一步&#xff1a;安装QT 5.8 和OpenCV3.1.0 并配置环境变量…

Windows10安装TeXlive和TeXstudio

参考https://blog.csdn.net/aiwei169/article/details/81431363 进入官网http://tug.org/texlive/ 第一步 第二步 第三步 第四步 等待 安装包下载 解压下载的文件&#xff0c;将解压后的安装包放在英文路径下&#xff08;即不要包含中文的路径&#xff09; 修改安装路径&am…

QT环境配置:QT5.8.0与VS2013环境配置

QT环境配置&#xff1a;QT5.8.0与VS2013环境配置 1、下载VS2013&#xff0c;QT5.8.0&#xff0c;qt-vs-tools-msvc2013-2.1.1。 1&#xff09;VS2013版本为&#xff1a;Visual Studio Ultimate 2013 2&#xff09;QT5.8.0版本为&#xff1a;qt-opensource-windows-x86-msvc20…

云计算与边缘计算协同的九大应用场景剖析

来源 | 中国信息通信院CAICT未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&…

QT学习笔记(十三):绘制图像

QT学习笔记&#xff08;十三&#xff09;&#xff1a;绘制图像 paintEvent() 事件源码添加&#xff1a; #include <QPainter> #include <QImage> #include <QPixmap> #include <QBitmap> #include <QPicture>void Widget::paintEvent(QPaintEve…

【Robot学院】一文读懂世界智能制造大趋势!

本文来源&#xff1a;智造智库工业4.0在德国被认为是第四次工业革命&#xff0c;主要是指&#xff0c;在“智能工厂”利用“智能设备”将“智能物料”生产成为“智能产品”&#xff0c;整个过程贯穿以“网络协同”&#xff0c;从而提升生产效率&#xff0c;缩短生产周期&#x…

QT学习笔记(十四):QLayout的属性介绍

QT学习笔记&#xff08;十四&#xff09;&#xff1a;QLayout的属性介绍 主要包括QBoxLayout、和QGridLayout以及QFormLayout等的参数类似。 我主要说明一下QGridLayout在QtDesigner中它的属性的意义&#xff0c;以及QFormLayout的部分属性 一、QGridLayout属性介绍 1、QGri…

查找所引用的文献在某种期刊下的引用格式(引用风格)

当我们要引用一篇文献时&#xff0c;常常需要知道这篇文献在某种期刊下的引用格式是怎样的。举个例子&#xff0c;我需要查找“Gradient-based learning applied to document recognition”这篇文献在Neuroimage期刊下的引用格式怎么写。 首先在谷歌学术上搜索“Gradient-base…

web desktop在线演示

http://mydesk.sinaapp.com基于extjs的web desktop应用框架。 1、跨浏览器2、动态载入所需css,js文件3、权限管理4、支持多语种5、支持asp,jsp,php6、Sql server2008数据库QQ: 623076512 Email&#xff1a; mychirs21cn.com 转载于:https://www.cnblogs.com/mengfanrong/p/5…

贝叶斯网络之父:当前的机器学习其实处于因果关系之梯的最低层级

来源&#xff1a;大数据文摘每当提起“无人驾驶”汽车技术如何强大&#xff0c;又被大众赋予了怎样的期待&#xff0c;都会让人想起HBO电视剧Silicon Valley《硅谷》中的一个情节&#xff1a;硅谷大亨风险资本家Gregory的助手安排了一辆无人驾驶汽车送创业公司的小员工Jared回家…

QT学习笔记(十五):QLabel的点击事件(clicked)添加

QT学习笔记&#xff08;十五&#xff09;&#xff1a;QLabel的点击事件&#xff08;clicked&#xff09;添加 Qt之添加QLabel的点击事件 QLabel功能为显示了一个字符串或者图片等信息&#xff0c;它本身没有click信号。也就不能够响应click点击事件&#xff0c;有什么办法来实…

引用文献管理软件Mendeley

Mendeley是一款强大的文献管理软件&#xff0c;只需要把引用的文献导入进去&#xff0c;就可以生成各种风格的文献引用格式 首先去官网下载Mendeley&#xff1a;https://www.mendeley.com/download-desktop/ 安装好&#xff0c;打开后点击add添加文献&#xff1a; 添加文献的方…