qt 容器QVector,QMap,QHash的常见使用与该迭代器的简单介绍
一.
QVector容器是一个动态数组,可以容纳任意数量的元素,在相邻的内存中存储给定的数据类型作为一组数据,在QVector前部或中间位置插入元素都会导致内存中大量的数据元素移动,这使得操作速度会减慢.可使用迭代器对这组数据进行访问.
和其他的容器类型类似,QVector容器的功能也有添加元素append(),删除元素remove(),修改元素replace(),查询contains(),访问.......
vStarts<<"鹿晗"<<"热巴"; //添加(尾部插入)vStarts.append("杨紫"); //头部插入vStarts.prepend("Anglebaby"); //尾部插入vStarts.insert(2,"小明"); //指定位置插入vStarts.replace(2,"迪丽热巴");//替换//删除元素下标为0的元素vStarts.remove(0);//删除某个元素vStarts.removeAll("鹿晗"); //移除所有比较结果相同的元素vStarts.removeAt(0); //移除指定位置的元素vStarts.removeOne("杨紫"); //移除比较结果相同的第一个元素vStarts.clear();删除所有元素qDebug()<<"是否有小明?:"<<vStarts.contains("小明");//查询是否有该元素
使用迭代器访问数据.
1.
java风格迭代器
//java风格只读迭代QVectorIterator<QString> it_sr(vStarts);for(it_sr.toFront();it_sr.hasNext();){qDebug() << it_sr.next();}//java风格读写迭代QMutableVectorIterator<QString> it_srw(vStarts);for(it_srw.toFront();it_srw.hasNext();){QString s = it_srw.next();//方式1.使用QString类型的compare()方法比较字符串.比较结果相同则返回0(假).if(!QString::compare(s,"热巴")){ it_srw.setValue("赵丽颖");}//方式2.//if(s == "热巴"){// it_srw.setValue("赵丽颖");//}}
2.
STL风格迭代器.
//STL读写迭代器QVector<QString>::iterator it_VWR;it_VWR = vStarts.begin();for(;it_VWR != vStarts.end();++it_VWR){*it_VWR = *it_VWR + "好人";qDebug()<<*it_VWR;}//STL只读迭代器QVector<QString>::const_iterator it_VR;it_VR = vStarts.constBegin();for(;it_VR != vStarts.constEnd();++it_VR){qDebug()<<*it_VR;}
二.
容器QMap类型由键(key)值(value)对组成一个元素.通过键key映射到值value.
第一个QString数据类型值是键key,第二个QString数据类型值是值value.一个键对应一个值,以key字母顺序(A~Z)存储数据.
//一个键对应一个值QMap<QString,QString> infoMap;//添加元素infoMap.insert("王祖蓝","163cm"); //方式1infoMap["姚明"] = "226cm"; //方式2infoMap.insertMulti("易烊千玺","173cm"); //方式3.如果映射中已经存在具有相同键的项,则该函数将简单地创建一个新项
通过key找value
qDebug() <<"姚明:" <<infoMap["姚明"]; //226cmqDebug() <<"易烊千玺:" <<infoMap.value("易烊千玺"); //173cm
通过value找key
qDebug()<<"173cm的是谁呢?"<<infoMap.key("173cm"); //易烊千玺
1.
java风格迭代器
与QVector容器迭代器非常类似,打印时要把迭代器位置指向下一个位置.同时打印键值对只能分别把键key和值value写出来,不能把俩个键值对当做一个整体来打印输出.
//java风格只读迭代器QMapIterator<QString,QString> it_r(infoMap);for(it_r.toFront();it_r.hasNext();){//方式1//it_r.next();//qDebug()<<it_r.key() <<":"<<it_r.value();//以key的字母A~Z作为排序的依据.有序存储.//方式2qDebug()<<it_r.next().key() <<":"<<it_r.value();} //java风格读写迭代器QMutableMapIterator<QString,QString> it_rw(infoMap);if(it_rw.findNext("163cm")){ //查找元素it_rw.setValue("163.1cm"); //重新设置元素值value}for(it_rw.toFront();it_rw.hasNext();){it_rw.next();//获取元素qDebug()<<it_rw.key()<<":"<<it_rw.value();}
2.
STL风格迭代器
//STL风格读写迭代器QMap<QString,QString>::iterator it_QWR;it_QWR = wMap1.begin();for(;it_QWR != wMap1.end();++it_QWR){qDebug()<<it_QWR.key()<<it_QWR.value() + "-STL";}//STL风格只读迭代器QMap<QString,QString>::const_iterator it_QR;it_QR = wMap1.constBegin();for(;it_QR != wMap1.constEnd();++it_QR){qDebug()<<it_QR.key()<<it_QR.value() + "-stl";}
3.
前面讲的是一个键对应一个值的情况,下面是一个键对应多个值的情况.
//一个键对应对多个值QMultiMap<QString,QString> wMap1;wMap1.insert("spring","15°C");wMap1.insert("summer","35°C");//一个键key插入多个值valuewMap1.insert("summer","39°C");wMap1.insert("summer","40°C");wMap1.insert("autumn","23°C");wMap1.insert("winter","-5°C");wMap1.insert("winter","-15°C");wMap1.insert("winter","-55°C");wMap1.remove("winter","-55°C"); //删除元素//打印一个键的多个值(键值对).所有winter键key的键值对都会被打印出来qDebug()<<endl<<"winter:"<<wMap1.values("winter");
通过value()函数,参数填写键值key,就能打印所有相同键的值value.即一个键key的对应的多个值value.使用迭代器访问的方式与上面一样.
三.
QHash容器与QMap容器一样,也是使用键值对的方式存储数据,它实现了一个哈希表,通过哈希函数将键映射到值,数据存放无序,任意顺序存储,所以它的存储速度比QMap更快.
//QHash类,数据存放无序QHash<int,QString> moneyHash;moneyHash.insert(1,"一块钱");moneyHash.insert(10,"十块钱");moneyHash.insert(20,"二十块钱"); //方式1moneyHash[50] = "五十块钱"; //方式2moneyHash[100] = "一百块钱";moneyHash.insertMulti(100,"毛爷爷"); //一个键有多个值使用函数insertMulti()插入//该方式让前面key为100的value"一百块钱"会被"毛爷爷"覆盖,insertMulti():一个键多个值会被保存//moneyHash[100] = "毛爷爷";
需要注意的是,如果一个键映射多个值,使用方式2并不能添加一个新的键值对,它只会在同一个键的键值对上,把前面相同键的值覆盖掉.所以使用insertMulti()函数才会添加新的键值对,而不会覆盖原有的键值对.
1.
java风格迭代器
迭代器的使用方式和上面的一样,这里就不一一列举了.
//java风格只读迭代器QHashIterator<int,QString> it_mr(moneyHash);//java风格读写迭代器QMutableHashIterator<int,QString> it_mrw(moneyHash);
2.
STL风格迭代器
由于迭代器的访问方式和前面的QMap类似,就不一一详细说明.
//STL读写迭代器 QHash<int,QString>::iterator it_SWR; //STL只读迭代器QHash<int,QString>::const_iterator it_SR;
all~~
相关文章:
qt 容器QVector,QMap,QHash的常见使用与该迭代器的简单介绍
一. QVector容器是一个动态数组,可以容纳任意数量的元素,在相邻的内存中存储给定的数据类型作为一组数据,在QVector前部或中间位置插入元素都会导致内存中大量的数据元素移动,这使得操作速度会减慢.可使用迭代器对这组数据进行访问. 和其他的容器类型类似,QVector…...
两线制无源 4-20mA 回路供电隔离变送器
两线制无源 4-20mA 回路供电隔离变送器 一入一出两线制无源 4-20mA 回路供电隔离变送器 概述:JSD TAW-1001D-100L-F 系列隔离变送器是 4-20mA 两线制回路供电的电流隔离变送配电器,该隔离变送器采用电磁隔离技术,并通过输入端馈电方式,给输入端两线制仪器仪表设备供…...
强化学习优质博客记录(随缘更新)
杂记 速成深度强化学习的人可能陷入的几个误区(2023-03更新) DQN DQN表现稳定提升和收敛的技巧集锦 TRPO 如何看懂TRPO里所有的数学推导细节? PPO The 37 Implementation Details of Proximal Policy Optimization强化学习算法中,PPO算法是不是就是加了重要…...
RabbitMQ-hello
0. pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0…...
案例044:基于微信小程序的消防隐患在线举报系统
文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…...
MES系统需要具备哪些性能方面的需求?
MES系统需要具备哪些“性能需求”?关于这个问题,我觉得有必要先和大家解释一下,到底什么是性能需求?性能需求在MES系统的作用是什么?讲明白了这2点,问题自然而然就解决了。 什么是性能需求? 通…...
数据在内存中的存储(整型篇)
1.辨析原码反码补码: 1.原码:有32位(int类四个字节,一个字节八个比特位),第一位是符号位,0正1负,其余为二进制位。 2.计算一般是对原码进行计算,但在负数计算使用原码会导…...
大一作业习题
第一题:答案: #include <stdio.h> void sort(int a[], int m) //将数组a的前m个元素(从小到大)排序 {int i 0;for (i 0; i < m - 1; i){int j 0;int flag 1;for (j 0; j < m - 1 - i; j){if (a[j] > a[j 1]){int t 0;t a[j];…...
Python大模型TensorFlow/PyTorch/Scikit-learn/Keras/OpenCV/Gensim
Python 作为一种高级编程语言,可以用于开发各种大小的模型。以下是一些常见的 Python 大模型,以及它们的优势、劣势和使用场景: TensorFlow: 优势:TensorFlow 是一个非常流行的深度学习库,具有高度的可扩…...
TCP 和 UDP 区别? 2、TCP/IP 协议涉及哪几层架构? 3、描述下 TCP 连接 4 次挥手的过程?为什么要 4 次挥手?
文章目录 1、TCP 和 UDP 区别?2、TCP/IP 协议涉及哪几层架构?3、描述下 TCP 连接 4 次挥手的过程?为什么要 4 次挥手?4、计算机插上电源操作系统做了什么?5、Linux 操作系统设备文件有哪些? 1、TCP 和 UDP …...
pyside/qt03——人机协同的编程教学—直接面向chatGPT实战开发(做中学,事上练)
先大概有个草图框架,一点点丰富 我纠结好久,直接用Python写UI代码 还是用designer做UI 再转Python呢, 因为不管怎么样都要转成Python代码, 想了想还是学一下designer吧,有个中介,有直观理解。 直接这样也可…...
swing快速入门(五)
注释很详细,直接上代码 上一篇 本篇新增内容: 1.布局管理器BorderLayout 2.自适应尺寸方法pack() import java.awt.*; public class swing_test_3 {public static void main(String[] args) {Frame framenew Frame("演示BorderLayout");//…...
银河麒麟v10系统SSH远程管理及切换root用户的操作方法
📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Linux》。🎯🎯 🚀无论你是编程小白,还是有一…...
设计模式——建造者模式(Java示例)
引言 生成器是一种创建型设计模式, 使你能够分步骤创建复杂对象。 与其他创建型模式不同, 生成器不要求产品拥有通用接口。 这使得用相同的创建过程生成不同的产品成为可能。 复杂度: 中等 流行度: 流行 使用示例:…...
深入探索 Spring Boot:简化开发,加速部署的全方位利器
目录 导言 1. 自动配置(Auto-Configuration) 2. 起步依赖(Starter Dependencies) 3. 嵌入式 Web 服务器 4. Actuator 5. 外部化配置 6. 简化的安全性配置 7. Spring Boot CLI 8. Spring Boot DevTools 导言 在当今软件开…...
SpectralGPT: Spectral Foundation Model 论文翻译3
遥感领域的通用大模型 2023.11.13在CVPR发表 原文地址:[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org) E.消融研究 在预训练阶段,我们对可能影响下游任务表现的各种因素进行了全面研究。这些因素包括掩蔽比、ViT patch大小、数据规…...
ubuntu-c++-可执行模块-动态链接库-链接库搜索-基础知识
文章目录 1.动态链接库简介2.动态库搜索路径3.运行时链接及搜索顺序4.查看可运行模块的链接库5.总结 1.动态链接库简介 动态库又叫动态链接库,是程序运行的时候加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序。动态…...
HTML中使用JavaScript实现一个简单的鼠标悬停特效。
代码中,我们首先在CSS中定义了一个红色的方块,然后使用:hover伪类定义了鼠标悬停时的样式。接着,在JavaScript中定义了一个函数showMessage(),用于在控制台输出一条消息。最后,在HTML中使用<div>标签定义了一个i…...
深入.NET平台和C#编程总结大全
第一章 简单认识.NET框架 (1)首先我们得知道 .NET框架具有两个主要组件:公共语言进行时CLR(Common Language Runtime)和框架类库FCL(Framework Class Library) 配图: (…...
jOOQ的使用场景
jOOQ的使用场景 jOOQ最初是作为一个库完全是JDBC和所有的数据库交互的抽象层而被创建。 在已有的软件产品中经常遇到的各种最佳实践被应用到这个库中。包含如下: 类型安全数据库对象引用,通过自动生成的模式, 表, 列,…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
EEG-fNIRS联合成像在跨频率耦合研究中的创新应用
摘要 神经影像技术对医学科学产生了深远的影响,推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下,基于神经血管耦合现象的多模态神经影像方法,通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里,本研…...
C# WPF 左右布局实现学习笔记(1)
开发流程视频: https://www.youtube.com/watch?vCkHyDYeImjY&ab_channelC%23DesignPro Git源码: GitHub - CSharpDesignPro/Page-Navigation-using-MVVM: WPF - Page Navigation using MVVM 1. 新建工程 新建WPF应用(.NET Framework) 2.…...
uniapp获取当前位置和经纬度信息
1.1. 获取当前位置和经纬度信息(需要配置高的SDK) 调用uni-app官方API中的uni.chooseLocation(),即打开地图选择位置。 <button click"getAddress">获取定位</button> const getAddress () > {uni.chooseLocatio…...
免费批量Markdown转Word工具
免费批量Markdown转Word工具 一款简单易用的批量Markdown文档转换工具,支持将多个Markdown文件一键转换为Word文档。完全免费,无需安装,解压即用! 官方网站 访问官方展示页面了解更多信息:http://mutou888.com/pro…...
python打卡day47
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import D…...
NLP常用工具包
✨做一次按NLP项目常见工具的使用拆解 1. tokenizer from torchtext.data.utils import get_tokenizertokenizer get_tokenizer(basic_english) text_sample "Were going on an adventure! The weather is really nice today." tokens tokenizer(text_sample) p…...
