QVector 和 QMap

news2024/12/27 12:12:48

QVector_QMap

QVector简介

头文件#include<QVector>

模块: QT += core

功能: QVector类是动态数组的模板类,顺序容器,它将自己的每一个对象存储在连续的内存中,可以使用索引号来快速访问它们

常用接口

判断容器是否为空

bool QVector::isEmpty() const:如果容器为空返回true

QVector<int> v;        

qDebug() << v.isEmpty();

查询元素个数

count() size() length()

QVector<int> v;       

v << 1 << 2 << 3;     

qDebug() << v.size(); 

qDebug() << v.length();

qDebug() << v.count();

获取vector客观容量

int capacity() const    //返回可以存储在vector中而不强制重新分配的最大项数

QVector<int> v;         

v.insert(0, 1);         

v.insert(1, 2, 2);      

v.replace(2, 3);        

v << 1 << 1 << 1;       

qDebug() << v.capacity();

访问数据

下标方式访问

QVector<int> v;    

v << 1 << 2 << 3;  

qDebug() << v.at(0);

qDebug() << v[0];  

迭代器方式访问

QVector<int> v;                      

v << 1 << 2 << 3;                    

                                     

QVector<int>::iterator it = v.begin();

for(;it!= v.end(); it++)             

{                                    

    qDebug() << *it;                 

}                                    

添加数据

尾部添加数据

void append(const T &value) 

void append(const QVector<T> &value)

void push_back(const T &value)

QVector<int> v;         

v.append(1);            

                        

QVector<int> v1 = {2, 3};

v.append(v1);           

v.push_back(4);         

qDebug() << v;          

头部添加数据

void prepend(const T &value) 

void push_front(const T &value)

QVector<int> v;

v.prepend(1);  

v.push_front(2);

qDebug() << v; 

任意位置添加数据

void insert(int i, const T &value) //将元素插入到i位置,i从0开始计算

void insert(int i, int count, const T &value) //从i位置开始插入count个T &value类型元素

QVector<int> v;  

v.insert(0, 1);  

v.insert(1, 2, 2);

qDebug() << v;   

修改数据

void replace(int i, const T &value)   //改变i位置元素的值

QVector<int> v;  

v.insert(0, 1);  

v.insert(1, 2, 2);

v.replace(2, 3); 

qDebug() << v;   

查找元素位置

int indexOf(const T &value, int from=...) const  //返回 value在vector中第一次出现的位置

参数form含义:如果指定则从索引from开始向前搜索

QVector<int> v;         

v.insert(0, 1);         

v.insert(1, 2, 2);      

v.replace(2, 3);        

qDebug() << v.indexOf(1);

int QVector::lastIndexOf(const T &value, int from = ...) const   //返回 value在vector中最后一次出现的位置

QVector<int> v;             

v.insert(0, 1);             

v.insert(1, 2, 2);          

v.replace(2, 3);            

v << 1 << 1 << 1;           

qDebug() << v.lastIndexOf(1);

判断容器是否包含某元素

bool QVector::contains(const T &value) const        //如果vector包含value则返回true

QVector<int> v;          

v.insert(0, 1);          

v.insert(1, 2, 2);       

v.replace(2, 3);         

v << 1 << 1 << 1;        

qDebug() << v.contains(1);

bool QVector::endsWith(const T &value) const         //如果vector最后一个元素等于value则返回true

QVector<int> v;          

v.insert(0, 1);          

v.insert(1, 2, 2);       

v.replace(2, 3);         

v << 1 << 1 << 1;        

qDebug() << v.endsWith(1);

bool QVector::startsWith(const T &value) const       //如果vector第一个元素等于value则返回true

QVector<int> v;            

v.insert(0, 1);            

v.insert(1, 2, 2);         

v.replace(2, 3);           

v << 1 << 1 << 1;          

qDebug() << v.startsWith(1);

截取链表

QVector<T> QVector::mid(int pos, int length = ...) const     //返回一个子容器,其中包含该容器中的元素,从位置pos开始。如果length为-1,则包含pos之后的所有元素;否则包含长度元素(如果链表长度小于长度元素,则包含所有剩余元素)

QVector<int> v;        

v.insert(0, 1);        

v.insert(1, 2, 2);     

v.replace(2, 3);       

v << 1 << 1 << 1;      

qDebug() << v.mid(0);  

qDebug() << v.mid(1, 2);

删除数据

void remove(int i, int count)  //从vector中移除从 i开始的count个元素 

void pop_back()  //删除vector中最后一个元素

void pop_front()  //删除vector中第一个元素

QVector<int> v;  

v.insert(0, 1);  

v.insert(1, 2, 2);

v.replace(2, 3); 

v << 1 << 1 << 1;

v.remove(0);     

qDebug() << v;   

v.remove(1, 3);  

qDebug() << v;    

QVector应用

QMap简介

头文件#include<QMap>

模块: QT += core

功能:QMap存储(键、值)对,并提供与键相关联的值的快速查找,基于红黑树实现(std::map也是基于红黑树实现)

QMap和 QHash差异:

(1)QHash的查找速度比QMap要快

(2)当在QHash上迭代时,项的顺序是任意的。使用QMap,项目总是按键排序

(3)QHash的键类型必须提供operator==() 和全局qHash(Key) 函数。QMap的键类型必须提供operator<(),以指定全序顺序。从Qt 5.8.1开始,使用指针类型作为键也是安全的,即使底层operator<()不提供全序顺序。

常用接口

判断容器是否为空

bool QMap::isEmpty() const:判断容器是否为空

QMap<int, QString> m;  

qDebug() << m.isEmpty();

查询元素个数

count() 、size()         //没有length函数

QMap<int, QString> m;

m[0]  = "one";       

m[1] = "two";        

qDebug() << m.size();

qDebug() << m.count();

访问数据

通过key访问value

QMap<int, QString> m; 

m[0]  = "one";        

m[1] = "two";         

qDebug() << m[0];     

qDebug() << m.value(1);

插入数据

可以用运算符[ ]插入一对 (key,value) 到QMap对象中

QMap<int, QString> m;

m[0]  = "one";       

m[1] = "two";        

qDebug() << m;       

QMap::iterator QMap::insert(const Key &key, const T &value)插入一个带有键key和值value的新项

如果已经存在键为key的项,则该项的值将替换为value

如果有多个键为key的项,则最近插入的项的值将替换为value

QMap<int, QString> m;

m[0]  = "one";      

m[1] = "two";       

m.insert(2, "three");

qDebug() << m;      

QMap::iterator QMap::insertMulti(const Key &key, const T &value)插入一个带有键key和值value的新项。

如果映射中已经存在具有相同键的项,则该函数将简单地创建一个新项。(此行为不同于insert(),后者覆盖现有项的值)

QMap<int, QString> m;   

m[0]  = "one";          

m[1] = "two";           

m.insert(2, "three");   

qDebug() << m;          

                        

m.insertMulti(2, "four");

qDebug() << m;          

修改数据

可以直接通过key访问对应value进行修改

QMap<int, QString> m;

m[0]  = "one";      

m[1] = "two";       

m[0] = "three";     

qDebug() << m;      

获取对应key的迭代器

QMap::iterator QMap::find(const Key &key)返回一个迭代器,该迭代器指向map中键为key的项

如果map包含多个传入键的项,则此函数返回一个迭代器,该迭代器指向最近插入的项。其他值可以通过对迭代器自增来访问

QMap<int, QString> m;                      

m[0]  = "one";                             

m[1] = "two";                              

QMap<int, QString>::iterator it = m.find(1);

qDebug() << *it;                                                          

查看QMap中是否包含某一元素

bool QMap::contains(const Key &key) const如果map包含键为key的项,则返回true;否则返回false。

QMap<int, QString> m;    

m[0]  = "one";           

m[1] = "two";            

qDebug() << m.contains(0);

删除数据

int QMap::remove(const Key &key)从map中删除所有带有key的项目。返回删除的项数,通常为1,但如果键不在map中则为0,或者如果已对键使用insertMulti()则为 >1

QMap<int, QString> m;    

m[0]  = "one";           

m[1] = "two";            

m.insertMulti(0, "three");

qDebug() << m.remove(0); 

qDebug() << m;           

QMap应用

employee.h

#ifndef EMPLOYEE_H                                                

#define EMPLOYEE_H                                                

                                                                  

#include <QDebug>                                                 

                                                                  

class Human                                                       

{                                                                 

public:                                                           

    Human(){}                                                     

    Human(const int age): age(age)                                

    {                                                             

    }                                                             

                                                                                                                                     

private:                                                          

    int age;                                                      

                                                                  

    friend inline QDebug operator<<(QDebug debug, const Human& h);

    friend inline bool operator<(const Human& h1, const Human& h2);

};                                                                

                                                                  

                                                                  

inline QDebug operator<<(QDebug debug, const Human& h)            

{                                                                 

    return (debug << h.age);                                        

}                                                                 

                                                                  

inline bool operator<(const Human& h1, const Human& h2)           

{                                                                 

    return h1.age < h2.age;                                       

}                                                                 

                                                                  

#endif // EMPLOYEE_H                                              

Human h1(22);         

Human h2(18);         

                      

QMap<Human, QString> m;

m[h1] = "小王";         

m[h2] = "小张";         

                      

qDebug() << m;        

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

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

相关文章

【数据结构】树和二叉树概念

1.树概念及结构 树概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#xff0c;…

Android获取系统读取权限

在Androidifest.xml文件中加上授权语句 <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/>

Android12之/proc/pid/status参数含义(一百六十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【LeetCode题目详解】第九章 动态规划part13 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组 (day52补)

本文章代码以c为例&#xff01; 一、力扣第300题&#xff1a;最长递增子序列 题目&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改…

Scrum敏捷开发工具的基本概念、使用方法、优势以及实际应用案例

​随着软件开发行业的不断发展和进步&#xff0c;Scrum敏捷开发工具逐渐成为了备受关注的话题。 Scrum是一种灵活且高效的项目管理方法&#xff0c;旨在提高团队协作和交付效率&#xff0c;使团队能够更快地响应变化和需求。 本文将深入探讨Scrum敏捷开发工具的基本概念、使用…

分类预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元数据分类预测

分类预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-CNN-BiGRU多特征分类…

敏捷项目管理实践及敏捷工具

​敏捷项目管理是一种基于敏捷开发方法的项目管理方式&#xff0c;它强调快速响应变化、持续交付价值和高效的团队合作。 1、确定敏捷宣言的价值观和原则&#xff0c;例如“以人为本”、“可用的软件”、“以客户为中心”、“拥抱变化”等&#xff0c;并在项目中始终遵循这些价…

二维差分---基础算法

书接上回 a二维数组是b二维数组的前缀和数组,b二维数组是a二维数组的差分数组,也就是说a[i][j]b[1][1]b[1][2] ......b[i][1] b[i][2] ...... b[i][j] ,下图是b的二维数组 如图,当你想要整个矩阵中的一个子矩阵都加上一个C,如果我们将b[x1][x2]加上C,那么a数组右下角所有的…

3.3 栈的表示和操作的实现

3.3.1 栈的类型定义 主要内容&#xff1a; 这段文字中包含了很多栈数据结构的基本概念和操作。 ### 3.3 栈的表示和操作的实现 #### 3.3.1 栈的类型定义 1. **数据对象**&#xff1a; - 定义了一个数据对象集合&#xff0c;记作 D {a1, a2, ..., an}&#xff0c;其…

一维的差分

差分的方法 差分实际上是前缀和的逆运算 ,这个关系和 积分与求导 的关系类似 例如有数组 ...... 和构造数组 ...... 我们要使得a数组是b数组的前缀和 ...... 那么该如何构造b数组呢? 令 , …

使用带有示例和代码的因式分解机的推荐系统

一、说明 在我之前的文章中&#xff0c;我讨论了推荐系统的基础知识、矩阵分解和神经协同过滤 &#xff08;NCF&#xff09;&#xff0c;您可以在下面的“我的博客”部分找到它们。接下来&#xff0c;这次我将通过示例和代码来探索因式分解机器。 将因子分解机用于推荐系统的一…

pytorch无法使用cuda

import torch # 如果pytorch安装成功即可导入 print(torch.cuda.is_available()) # 查看CUDA是否可用 print(torch.cuda.device_count()) # 查看可用的CUDA数量 print(torch.version.cuda) # 查看CUDA的版本号#False #0 #None 表明安装失败&#xff01;查看安装包&#xff1a;…

Gin框架---基础综述

目录 一&#xff1a;经典入门案例二&#xff1a;请求参数2.1: API参数2.2: URL参数2.3: 表单参数 三&#xff1a; 响应参数四&#xff1a;数据解析和绑定4.1: JSON数据解析绑定4.2: FROM表单数据解析和绑定 五&#xff1a; 路由组六&#xff1a;异步处理七&#xff1a;中间件7.…

【UE】刀光粒子效果——part1

效果 步骤 1. 打开3dsmax&#xff0c;首先新建一个管状体 转成可编辑多边形后&#xff0c;删除多余的面&#xff0c;只保留一层 选择内圈将其拉高5mm 在修改器列表中添加“UVW展开” 点击打开“UV编辑器” 选中左边所有的顶点 将其拖拽到最左边 将右边的点拖拽到最右边 关闭 “…

VR古迹复原——数字化复原圆明园,开创文化遗产保护新方式

圆明园是中国历史上一处重要的文化遗产&#xff0c;曾经被誉为“万园之园”&#xff0c;但在1860年的英法联军侵华战争中被毁。近年来&#xff0c;虚拟现实技术不断发展&#xff0c;广州华锐互动利用VR全景技术复原了圆明园&#xff0c;通过VR设备&#xff0c;人们可以在家中就…

浏览器面试题

浏览器面试题 1.常见的浏览器内核有哪些&#xff1f;2.浏览器的主要组成部分有哪些&#xff1f;3.说一说从输入URL到页面呈现发生了什么&#xff1f;4.浏览器重绘域重排的区别&#xff1f;5.CSS加载会阻塞DOM吗&#xff1f;6.JS会阻塞页面吗&#xff1f;7.说一说浏览器的缓存机…

基于ASP.NET的驾校管理系统设计与实现

摘 要 伴随国民经济的飞速发展和人民生活水平的不断提高&#xff0c;家用汽车在我国逐渐普及。面对不断增长的庞大的用户群&#xff0c;随之产生的驾驶培训行业&#xff0c;规模不断扩大。近年来&#xff0c;随着Internet的迅速发展以及网页制作技术的日臻完善&#xff0c;驾校…

win10查看并设置tomcat的jvm堆内存参数

win10查看并设置tomcat的jvm堆内存参数 查看 进入命令行 通过Winr命令输入cmd进入命令行页面 进入到jdk的bin目录 D: cd D:\Y4ECSRUN\WGQ4 Java jdk1.8.0 131\bin执行jps查看进程pid D:\Y4ECSRUN\WGQ4 Java jdk1.8.0 131\bin>jps 16528 Jps 6868 Bootstrap通过jmap查看…

【客户案例】脊叶架构(Spine-Leaf)的云化园区网络部署实践

前言 各行业数字化转型进程加快&#xff0c;作为基础设施的园区网络也面临着升级压力。为此&#xff0c;星融元通过将先进成熟的云网络建设理念引入园区场景&#xff0c;推出了“云化园区网络解决方案”&#xff0c;帮助客户网络实现架构级的深层优化。 云化园区网络解决方案介…

python 综合练习

条件&#xff1a;ML100k.data 注意&#xff1a;程序对列表进行修改&#xff0c;为避免列表索引出现问题&#xff0c;避免使用for i in range(len(data)),而使用for i in data可避免这一问题 import pickle data [] with open("ML100k.data", r) as file:for line …