STL库的使用之容器模板类QVector使用

2023-11-09

Qt中提供了一组通用的基于模板的容器类,对比C++中的STL库的容器类,Qt的这些容器类更轻量、更安全并且容易使用同时在速度、内存消耗、内联代码等方面进行了优化,存储在Qt的容器中数据必须是可赋值的数据类型,数据类型必须提供一个默认的构造函数、一个复制构造函数和一个赋值操作运算符

今天介绍关于QVector容器类的使用方法

QVector是Qt中的通用容器类,它是有序的存储元素,并提供基于索引的快速访问方法;

QList<T>、QLinkList<T>、QVector<T>、QVarLengthArray<T>的api接口和功能类似,可以互换使用,性能上有些区别:

1.首选QVector类,它的性能比QList好,因为QVector中的项是有序的存储在内存中,而QList中的项是存储在堆上除非Qlist的sizeof(T)<=sizeof(void*)并且T已经使用Q_DECLARE_TYPEINFO声明为Q_MOVABLE_TYPE或Q_PRIMITIVE_TYPE

2.QList主要用于Qt中api接口函数的传参和返回值

3.如果您需要一个真正的链表,它保证在链表中间插入的时间是常数,并且对项使用迭代器而不是索引,那么可以使用QLinkedList。

注意:QVector和QVarLengthArray都适用C的数组布局,QList不行;在调用C的API的应用程序中很重要;

只要引用的项仍然在容器中,QLinkedList的迭代器和对堆分配QList的引用就仍然有效。但对于QVector和非堆分配QList的迭代器和引用则无效

下面是关于一些QVector类的方法的使用

1.定义一个QVector的数组

QVector<QString> vector;

2.定义并初始化一个大小为10个元素项的vector

QVector vector(10);

3.想要修改某个元素可以使用索引运算符[],只是访问的话使用at()方法(at()访问速度比[]快,它不需要深拷贝)

vector[1]="Elizabeth";//修改vector中的元素值

cout<<vector.at(1)<<endl;//访问vector的第一个元素,

4.查找某个元素的索引值

//成功返回所引,失败返回-1
vector.indexof("Alfonso");

5.判断某个元素是否存在

if(vector.contains("Alfonso"))
    cout<<"Alfonso存在"<<endl;
else
    cout<<"Alfonso不存在"<<endl;

QVector还提供了这些方法:insert、replace、remove、prepend、append;对于大容量的QVector想要快速的插入和删除,建议还是使用QLsit或者QLinkList替代;

QVector中的STL风格的迭代器有:const_iterator、iterator、reverse_iterator

只读迭代器const_iterator的访问速度比读写iterator迭代器访问速度快

QVector::begin()返回指向第一个列表项的迭代器,QVector::end()返回容器最后列表项之后的虚拟列表项

(后续还会继续更新当前的内容,如有错误,欢迎指正)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STL库的使用之容器模板类QVector使用 的相关文章

  • 在 Web 浏览器中禁用 F5 [重复]

    这个问题在这里已经有答案了 可能的重复 禁用浏览器的后退按钮 https stackoverflow com questions 961188 disable browsers back button 如何禁用浏览器上的 F5 刷新 htt
  • 从 Invoke 方法获取 RETURN

    我正在尝试从另一个线程上的列表框项目中读取值 我尝试创建一种新方法来运行调用命令 我可以设法将命令发送到列表框 例如通过调用方法添加 但我似乎无法得到响应 我似乎无法获取该项目的值 我尝试了几种方法 一旦我将它从空变为字符串 事情就开始变得
  • 从另一个 FORM 中取回隐藏的 FORM

    我有两种形式Form1 and Form2 我正在打开Form2 from Form1 on button Click Form2 obj2 new Form2 this Visible false obj2 Show 然后我想回来Form
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • C++中的类要具备什么条件才能成为容器?

    我是 C 编程新手 偶然发现了这个术语containers举例如下vector deque map etc 一个企业的最低要求应该是什么class应该满足被称为container in C 我将从 范围 这个概念开始 Range 只有两个方
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • DataGridView 列中的数字文本框

    我有一个DataGridView 我想要它的第一列或任何所需的列 其中有textboxes在其中 成为NUMERIC ONLY 我目前正在使用这段代码 private void dataGridViewItems EditingContro
  • 为什么 C# 中同一类型的隐式和显式运算符不能共存? [复制]

    这个问题在这里已经有答案了 为什么同一类中两个相同类型的运算符 显式和隐式 不能共存 假设我有以下内容 public class Fahrenheit public float Degrees get set public Fahrenhe
  • PrivateObject 找不到属性

    我的结构基本上如下所示 abstract class A protected string Identificator get set private void DoSomething DoSomethingSpecific protect
  • 判断串口是普通COM还是SPP

    我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM 也称为 COM 设备的电缆替换蓝牙适配器 我有一个可以在 USB COM gt USB 和蓝牙下工作的设备 并且蓝牙接口可以与 SPP 一起工作 我目前正在使用Syst
  • 编写具有多种类型的泛型扩展方法时的类型推断问题

    我正在为 IEnumerable 编写一个通用扩展方法 用于将对象列表映射到另一个映射对象列表 这就是我希望该方法的工作方式 IList
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 如何在 EF Core 2.1 中定义外键关系

    我的 DAL 使用 EF Core 2 1 这就是我的模型的样子 一名用户只能拥有一种角色 Role entity kind of master public class Role public int RoleId get set pub
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • 在 Qt 中播放通知(频率 x)声音 - 最简单的方法?

    Qt 5 1 或更高版本 我需要播放频率为 x 的通知声音 n 毫秒 如果我能像这样组合音调那就太好了 1000Hz 持续 2 秒 然后 3000Hz 持续 1 秒 最简单的方法是使用文件 WAV MP3 例如如此处所述 如何用Qt播放声音
  • 当 Verb="runas" 时设置 ProcessStartInfo.EnvironmentVariables

    我正在开发一个 C 应用程序 我需要创建变量并将其传递给新进程 我正在使用ProcessStartInfo EnvironmentVariables 新进程必须提升运行 因此我使用 Verb runas var startInfo new
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • 如何在 Razor 编辑视图中显示选中的单选按钮 Asp net core mvc

    尽管 Razor 视图中的 Asp 网络核心代码 model List
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe

随机推荐

  • 使用ping检测MTU值

    ping ping Packet Internet Groper 是一种因特网包探索器 用于测试网络连接量的程序 Ping是工作在 TCP IP网络体系结构中应用层的一个服务命令 主要是向特定的目的主机发送 ICMP Internet Co
  • sql语句-如何以一个表中的数据为条件据查询另一个表中的数据

    下面这个是SQL语句的一个基本样式 select from 表2 where 姓名 in select 姓名 from 表1 where 条件 实例需求 在项目中是这样应用的 我需要根据库位编号去查找库位信息表里查找库位上放的的料箱编号 我
  • C++-----动态规划

    目录 一 动态规划的基本思想 二 设计动态规划法的步骤 三 动态规划问题的特征 4 1 矩阵连乘积问题 4 1 1 分析最优解的结构 4 1 2 建立递归关系 4 1 3 计算最优值 4 1 3 计算最优值 4 1 3 构造最优解 4 2
  • 面向对象设计原则——单一职责原则

    单一职责原则是最简单的面向对象设计原则 它用于控制类的粒度大小 单一职责原则 Single Responsibility Principle SRP 一个类只负责一个功能领域中的相应职责 或者可以定义为 就一个类而言 应该只有一个引起它变化
  • 移植python到小米路由器记录。

    最近抢了一个小米路由器 研究了一下 总的来说现在看起来功能还很少 现在比较有用的功能就是 远程下载功能 支持迅雷 电驴等 不过现在看电影啥的都是直接在线看的 基本上也很少用 检测连接的智能设备 这个功能可以随时查看是否有人曾网 当然也可以用
  • git项目初次push提示 error: failed to push some refs to ‘https://github.com/xxx

    问题描述 当你的项目不是先从远程仓库pull下来 再push的话 可能会出现 push被拒绝问题 rejected cfj gt cfj non fast forward error failed to push some refs to
  • 定义样式并获取上传文件路径及指定文件类型

  • dataframe显示数据处理进度

    显示效果如下 tqdm搭配progress apply使用 from tqdm import tqdm tqdm pandas desc pandas bar df result df score progress apply lambda
  • 发现一个bug如何定位是前端还是后台问题?

    1 经验法 软件测试人员应不断精进自己的技能 负责的项目多了 自然对功能的实现过程有了解 也就明白如何分类bug了 例如 网页上的某个图片的分辨率不对 如果我们了解实现过程 可以想到一般情况下 是根据某个地址去服务器取图片的 数据库一般只保
  • c/c++ 力扣LeetCode 645.错误的集合

    题目链接 力扣 645 错误的集合 不想戳的看下图 解题思路 循环嵌套 对于这道题 有很多种方法 首先想到的 应是循环嵌套 直接for循环两边寻找相同 并求得丢失的整数 代码就不展示了 想必大家都会写 但时间复杂度O n2 是相当高的 对于
  • ios html mail,在Ios上的html电子邮件中显示base64图像

    我生成一个包含base64图像的html字符串 当MFMailComposeViewController打开时 我会看到生成的电子邮件中的图像 当我发送并打开它时 图像不会显示 只有空方块 我的代码 IBAction actionShare
  • VSCode无法登录leetcode,报[ERROR] invalid password?错误

    原因 leetcode cn的用户名是手机或者邮箱 不能用昵称登录 在官网退出登陆后发现用昵称登录不了 换成邮箱或者手机号后 登录成功 login node 960 Warning Accessing non existent proper
  • SQL Server主流版本生命周期管理

    SQL Server 生命周期 每个版本的 SQL Server 都有至少 10 年的支持期限 其中包括五年的主要支持和五年的扩展支持 主要支持 包括功能 性能 可伸缩性和安全更新 扩展支持 仅包含安全更新 终止支持 有时也称为生命周期结束
  • 2020年高教社杯全国大学生数学建模竞赛赛题 C题分析与思路!(持续更新)

    C题 中小微企业的信贷决策 1 C题题目背景 分析 在实际中 由于中小微企业规模相对较小 也缺少抵押资产 因此银行通常是依据信贷政策 企业的交易票据信息和上下游企业的影响力 向实力强 供求关系稳定的企业提供贷款 并可以对信誉高 信贷风险小的
  • 【nginx编译-zierror: ‘struct crypt_data‘ has no member named ‘current_salt‘】

    nginx编译 src os unix ngx user c In function ngx libc crypt src os unix ngx user c 26 7 error struct crypt data has no mem
  • C#中Class与Struct区别

    C 中Class与Struct区别 1 class 是引用类型 继承自System Object stuce是值类型 继承自System ValueType类 因此不具多态性 但是注意 System ValueType是个引用类型 2 从职
  • 如何用SPSS对数据进行标准化处理?

    SPSS统计分析软件是我最早接触的数据分析工具 我的博客将陆续介绍SPSS统计分析软件的相关内容 这类文章将统一按照在标题或者正文第一段出现 SPSS案例分析 编号 的形式组织 便于读者朋友们快速查询 收集 今天是第一篇 即 SPSS案例分
  • python循环与文件操作

    if 语句语法结构 if 条件 elif 条件 else 1 如果表达式的值 非0 或者为布尔值 True 则代码组 if suite 被执行 否则就去执行 else suite 2 只要表达式数字为 非零值 即为 True 3 空字符串
  • 移植使用tslib 库

    目录 tslib 简介 tslib 移植 下载tslib 源码 编译tslib 源码 tslib 安装目录下的文件夹介绍 在开发板上测试tslib tslib 库函数介绍 打开触摸屏设备 配置触摸屏设备 读取触摸屏数据 基于tslib 编写
  • STL库的使用之容器模板类QVector使用

    Qt中提供了一组通用的基于模板的容器类 对比C 中的STL库的容器类 Qt的这些容器类更轻量 更安全并且容易使用同时在速度 内存消耗 内联代码等方面进行了优化 存储在Qt的容器中数据必须是可赋值的数据类型 数据类型必须提供一个默认的构造函数