首页 > 其他分享 >Qt 如何遍历序列容器(QVector|QMap|...)

Qt 如何遍历序列容器(QVector|QMap|...)

时间:2024-04-11 20:14:55浏览次数:23  
标签:... 遍历 Qt map STL QVector next itr QMap

  QT提供了两种风格的遍历器:Java 和 STL

一、Java风格遍历器
  Java 风格的遍历器是 Qt 首先推荐使用的形式。这种风格比起 STL 风格的遍历器更方便。方便的代价就是不如后者高效。Java 风格的遍历器指向的是两个元素之间的位置,而不是指向元素本身。因此,它们可能会指向集合第一个元素之前的位置,也可能指向集合的最后一个元素之后的位置。每一种容器都有两种 Java 风格的遍历器:一种提供只读访问,一种提供读写访问:

以QVector为例,只读遍历的demo代码如下:

1 QVector<QString> vct = {"A","B","C","D","E"};
2 QVectorIterator<QString> itr(vct);
3 while (itr.hasNext())
4 {
5     qDebug() << "itr.next()=" << itr.next();
6 }

输出结果如下:

1 itr.next()= "A"
2 itr.next()= "B"
3 itr.next()= "C"
4 itr.next()= "D"
5 itr.next()= "E"

如果需要修改其中容器的值,代码如下:

1 QVector<QString> vct = {"A","B","C","D","E"};
2 QMutableVectorIterator<QString> mitr(vct);
3 while (mitr.hasNext())
4 {
5     if (mitr.next() == "C")
6     {
7         mitr.setValue("v");
8     }
9 }

QMap的遍历也是类似

 1 QMap<int, QString> map;
 2 map.insert(1, "Apple");
 3 map.insert(2, "Banana");
 4 map.insert(3, "Cherry");
 5 map.insert(4, "Grape");
 6 
 7 QMapIterator<int, QString> itr(map);
 8 while (itr.hasNext()) {
 9     if (itr.next().key() < 3)
10         qDebug() << itr.value();
11 }

二、STL风格遍历器

  STL 风格的遍历器能够兼容 Qt 和 STL 的通用算法,并且为速度进行了优化。Qt 也提供了两种 STL 风格的遍历器:一种是只读访问,一种是读写访问。推荐尽可能使用只读访问,因为它们要比读写访问的遍历器更快。

QList遍历

1 QList<QString> lst;
2 lst << "Apple" << "Banana" << "Cherry" << "Grape";
3 QList<QString>::iterator itr = lst.begin();
4 for (itr; itr != lst.end(); ++itr) {
5     qDebug() << *itr;
6 }

QMap遍历

1 QMap<int, QString> map = {
2         {1, "Apple"},
3         {2, "Banana"},
4         {3, "Cherry"}
5     };
6 QMap<int, QString>::const_iterator citr = map.constBegin();
7 for (citr; citr != map.constEnd(); ++citr) {
8     qDebug() << citr.key() << ":" << citr.value();
9 }

输出结果如下:

1 1 : "Apple"
2 2 : "Banana"
3 3 : "Cherry"

 

标签:...,遍历,Qt,map,STL,QVector,next,itr,QMap
From: https://www.cnblogs.com/ybqjymy/p/18129938

相关文章

  • Qt编译MySQL驱动
    Qt编译MySQL驱动参考:qt6.5.0MySQL驱动手动编译以及数据库连接详细教程以及注意事项附资源链接_qt编译mysql驱动-CSDN博客由于MySQL等数据库的client库遵循的协议与GPL不兼容,因此Qt发布时不带有这些驱动,需要自行编译。在Qt5版本的编译由于使用傻瓜式的qmake,要简单很多:QT出现没......
  • 上海泗博推出OPLink软件---助力企业快速搭建OPC与MQTT平台通信
    OPLink是上海泗博自主研发的基于OPC数据采集及转发,OPC数据到MQTT通信的产品。它是基于上海泗博多年的OPC应用经验和工业通信产品的开发背景,推出的OPC/MQTT工业通信软件。这款软件设计简洁、实用、稳定。同时,OPLink还具备与KepwareLinkMaster相似的数据转发功能,可实现PLC设备间的......
  • QtCreator配置C++20开发环境
    我不知道你的QtCreator是什么版本的,但是我觉得操作方案是相同的,让QtCreator编译C++20代码,需要你有一个支持C++20的编译器,不管你是msvc还是gcc,总要有一个。如果你和我一样,用的5.12.12,那真的太巧了,请看步骤吧:配置kit:首先你应该有一个Qt版本的列表,如果没有,请你自行添加,添加的方式......
  • Qt 多窗体
    前言        在Qt编程中经常会遇到要在多个界面之间切换的情况,如从登录界面跳转到主界面,从主界面跳转到设置界面,再返回到主界面。我们将会用一个简单的示例来实现多窗体功能。登录窗口    创建基类为QMainWindow,类名为LoginWin。再使用ui界面设计。 ......
  • Qt 对话框常见类型
    前言        对话框是GUI程序设计中不可或缺的组成部分,很多不能或者不适合放入主窗口的功能组件都必须放在对话框中。        Qt使用QDialog类实现对话框,通常会设计一个类继承QDialog类。QDialog类(及其派生类,以及所有Qt:Dialog类型的类)对其parent......
  • 【QT入门】Qt自定义控件与样式设计之QPushButton常用qss
    往期回顾【QT入门】Qt自定义控件与样式设计之qss介绍(Qtstylesheet)-CSDN博客【QT入门】Qt自定义控件与样式设计之qss选择器-CSDN博客【QT入门】Qt自定义控件与样式设计之QLineEdit的qss使用-CSDN博客 【QT入门】Qt自定义控件与样式设计之QPushButton常用qss这里我......
  • 【QT入门】 Qt自定义控件与样式设计之QCheckBox qss实现按钮开关
    往期回顾【QT入门】Qt自定义控件与样式设计之QPushButton常用qss-CSDN博客【QT入门】Qt自定义控件与样式设计之QPushButton实现鼠标悬浮按钮弹出对话框-CSDN博客【QT入门】Qt自定义控件与样式设计之QComboBox样式表介绍-CSDN博客 【QT入门】Qt自定义控件与样式设计之......
  • Qt使用Sqlite数据库-2
        上一篇文章介绍了sqlite数据库在Qt中基本使用方法(链接:Qt使用Sqlite数据库-1(入门级)-CSDN博客)。今天继续学习数据库常用的语法。1.删除数据库内容voiddeleteData(){QStringSql;//拼接sql语句Sql="DELETEFROMPerson_TableWHEREName='张......
  • MQTT协议特点及数据包结构详解(值得珍藏)
    点击下载《MQTT协议特点及数据包结构详解(值得珍藏)》1.前言MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,用极少的代码和有......
  • python收到MQTT消息后再发http请求
    python收MQTT消息和 发http请求的代码在前面的文章都有介绍,这里直接上完整的功能代码mqtt2http.py#python3.6importloggingimportrandomimporttimeimportrequests#frompaho.mqttimportclientasmqtt_clientimportpaho.mqtt.clientasmqttBROKER='......