容器类:QVector、QList、QSet、QMap使用_qvector添加元素-程序员宅基地

技术标签: QVector  容器  QList  QSet  qt基础  QMap  

一、介绍
std中有几个常用的容器:vector、List、set、map,Qt中也封装了类似的容器。Qt 的容器类提供了隐式数据共享、不可变的特性,并且为速度做了优化,具有较低的内存占用量等 。
二、QVector
1、添加元素

   QVector<int> intVec;
    intVec.append(10);
    intVec << 11 << 12;
    intVec.push_back(13);
    intVec.push_front(9);
    intVec.insert(2, 20);
        
   //9 10 20 11 12 13

2、遍历元素

   QVector<int>::iterator iter;
    for(iter = intVec.begin(); iter != intVec.end(); iter++)
    {
        qDebug() << *iter;//9 10 20 11 12 13
    }

3、删除元素

   intVec.remove(1);//删除第1个元素,从0开始
    intVec.remove(1, 3);//删除从第1个元素开始的3个元素
    intVec.removeFirst();//删除首元素
    intVec.removeLast();//删除最后一个元素
        intVec.removeAll(2);//删除所有与2相等的元素

4、查询元素

   intVec.contains(3);//查询vector中是否包含该值的元素

5、性能
(1)QVector插入元素insert会很慢,因为内存中移动一个位置,这会引起大量数据在内存中的移动 ,中间插入使用QList会比较快
(2)at()比operator读取速度快,因为这个不会使用深拷贝
(3)使用reserve()预先分配一定的内存大小空间,避免所需空间大于默认分配空间,造成内存多次分配

二、QList
1、添加删除元素

   QList<QString> list;
    list << "a" << "b";//左操作符进行追加元素
    list.append("c");
    list.insert(2, "we"); //在第2个元素位置插入元素
    list.push_back("dd"); //尾插法
    list.removeAt(2); //删除第2个元素

2、遍历元素

    QList<QString>::iterator iter;
    int index = 0;
    for(iter = list.begin(); iter != list.end(); iter++, index++)
    {
        qDebug() << *iter << list.at(index) << list[index];//可以使用索引或迭代器,上同
    }
//    "a" "a" "a"
//    "b" "b" "b"
//    "c" "c" "c"
//    "dd" "dd" "dd"

三、QSet
QSet类是一个模板类,他是一个哈希表集合。
QSet是Qt的一个普通容器类。QSet存储的值是不指明顺序的,QSet对这些值提供了快速检索的功能
1、操作元素

   QSet<int> setInt;
    setInt.insert(1);
    setInt.insert(2);
    setInt << 3 << 4 << 5 << 5;
    setInt.contains(2); //查询是否有3
    qDebug() << setInt.size(); //5,重复的自动去掉

2、遍历元素

QSet<int>::iterator iter;
    for(iter = setInt.begin(); iter != setInt.end(); iter++)
    {
        qDebug() << *iter;//1 4 5 2 3 
    }

四、QMap
QMap<Key, T>:提供了字典数据结构(关联数组),将类型 T 的值同类型 Key 的
键关联起来。通常,每个键与一个值关联。 QMap 以键的顺序存储数据;如果顺序无
关, QHash 提供了更好的性能,类似的,QMultiMap<Key, T>:这是 QMap 的子类,提供了多值映射
1、基本使用

    QMap<int , QString> mapInt;
    mapInt.insert(2,"aaa");
    mapInt[3] = "bbb"; //也可以这种方式插入数据
    bool isCtn = mapInt.contains(2);//是否包含该键值 isCtn = true
    QString str = mapInt[2];//根据键,取出对应的值 str = "aaa"

2、遍历容器

   QMap<int,QString>::iterator it; //遍历map
    for ( it = mapInt.begin(); it != mapInt.end(); ++it )
    {
        qDebug( "%d: %s", it.key(), it.value()); //用key() value()分别获取“键”和“值”
    }

上述遍历方式,我都只采用类std遍历方式,还有其他几种方式,如java风格的iter.hasNext,qt特有的foreach关键字进行遍历,各人的喜好不一样,可以根据自己的代码风格来选用其中一种

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baidu_31541363/article/details/93488216

智能推荐

【原创】ARM LINUX 外部RTC实时时钟驱动移植(RX8025)_rx8025驱动-程序员宅基地

文章浏览阅读6.8k次。ARM LINUX 外部RTC实时时钟驱动移植(RX8025) Author: chad Mail: [email protected]开发板:AT91SAM9260 内核版本:linux-2.6.30解决办法如下: 第一步:修改board-sam9260ek.c文件修改/arch/arm/match-at91/board-sam9260ek.c,添加如下代码: 在ek_board__rx8025驱动

CTF Bugku GET_bugku get题-程序员宅基地

文章浏览阅读355次。进入场景后看到一串PHP源代码根据这源代码的提示,很容易想到使用GET方法来传递what参数以此来满足条件语句。所以在地址栏里面构造如下:回车之后,what参数的值就传过去了,flag也就出来了本题总结:难度不大,提示的已经很明确了。本题就是专门训练GET方法的。只要明白GET方法在url里面的呈现形式就可以很容易的做出这道题来。..._bugku get题

【Python CheckiO 题解】Three Words_python判three words-程序员宅基地

文章浏览阅读788次。CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,传送门:https://checkio.org/,本博客主要记录自己在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。题目描述【Three Words】:给定一个字符串,判断其是否为连续的三个单词(单词非单个字母),单词与数字之..._python判three words

Fabricjs使用Group实现组合对象_fabric.group-程序员宅基地

文章浏览阅读3.3k次,点赞2次,收藏4次。场景Fabricjs一个简单强大的Canvas绘图库快速入门:Fabricjs一个简单强大的Canvas绘图库快速入门_BADAO_LIUMANG_QIZHI的博客-程序员宅基地在上面的基础上,可以实现在画布上添加对象,如果需要组合对象,并设置组合对象的功能属性可以使用new fabric.Group():接受两个参数。注:博客:BADAO_LIUMANG_QIZHI的博客_霸道流氓气质_程序员宅基地-C#,SpringBoot,架构之路领域博主关注公众号霸道的程序猿获_fabric.group

【JDBC技术】终于知道Java底层是如何连接数据库了!——(8)Apache-DBUtils实现CRUD操作_如何使用apache dbutils连接数据库-程序员宅基地

文章浏览阅读3.9k次。JDBC 核心技术解析文章目录JDBC 核心技术解析Apache-DBUtils实现CRUD操作1. Apache-DBUtils简介2. 主要API的使用2.1 DbUtils2.2 QueryRunner类2.3 ResultSetHandler接口及实现类Apache-DBUtils实现CRUD操作1. Apache-DBUtils简介commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大_如何使用apache dbutils连接数据库

std::future-程序员宅基地

文章浏览阅读192次。1. future1. future1.1. future相关结构1.2. async相关结构1.3. packaged_task 相关结构1.4. promise相关结构1.5. 参考资料1.1. future相关结构Member functionsfundescpub/priv(constructor)constructs the future object(public member function)(destructor)destruc_std::future

随便推点

JFinal配置数据库连接池插件和表类映射_jfinal 数据库连接池插件-程序员宅基地

文章浏览阅读1.1k次。配置数据库连接池插件,此处以Druid为例,还需要配置数据库访问插件,即ActiveRecord插件,用于建立数据库中Table和Java Bean的mapping映射:public void configPlugin(Plugins me) { // 配置 druid 数据库连接池插件 DruidPlugin druidPlugin = new DruidPlu..._jfinal 数据库连接池插件

postfix的身份验证-程序员宅基地

文章浏览阅读648次。Postfixpostfix是WietseVenema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。postfix是WietseVenema想要为使用最广泛的sendmail提供替代品的一个尝试。在Internet世界中,大部分的电子邮件都是通过sendmail来投递的,大约有100万用户使用sendmail,每天投递上亿封邮件。这真是一个让人吃惊的数字。Post..._postfix 身份验证

政府工程项目完工、交工和竣工的区别_项目竣工概念-程序员宅基地

文章浏览阅读3.2k次。政府工程项目完工、交工和竣工的区别完工:承建方按合同完成项目建设将设计文件转化为工程的工作。交工:工程通过业主组织的交工验收,承建方与业主进行工程交接、开始运营进入试运行阶段。竣工:一般是指正常运营一段时间(3年)后,工程通过业务验收合格,业务支付保留我。交工验收主要工作为:检查合同执行情况,评价工程质量,对参建单位进行初步评价。竣工验收主要工作为:对工程质量、参建单位进行综合评价,并对工程项目建设对行整体综合评价,如果项目建设目标是否达到预期效果。..._项目竣工概念

后渗透篇:清理windows入侵痕迹总结【详细】_当入侵主机后,攻击者清楚自己在系统中留下一些记录,现在需要对这些记录进行痕迹清-程序员宅基地

文章浏览阅读1.3w次,点赞6次,收藏61次。当你的才华还撑不起你的野心时那你就应该静下心来学习目录清理windows入侵痕迹0x01 前言了解为什么需要清除入侵痕迹?一、设置跳板二、必不可少的跳板三、代理服务器简介1)http代理服务器2)Sock5代理服务器3)VPN代理服务器四、使用Tor隐身了解需要删除哪些日志?1...._当入侵主机后,攻击者清楚自己在系统中留下一些记录,现在需要对这些记录进行痕迹清

光学时钟“升天”助力卫星精准导航_飞秒光学频率梳-程序员宅基地

文章浏览阅读290次。光学时钟“升天”助力卫星精准导航光学时钟“升天”助力卫星精准导航科学家们对于精准时间的追求从未停止,目前世界上最准的时钟当属光学时钟。虽然早有研究人员提出将光学时钟应用到卫星上,以提升卫星定位的准确程度,但如何保持光学时钟在太空中与地球上一样稳定发挥,一直是争论的焦点。1小时由60分钟组成,1分钟由60秒组成,那么1秒钟有多长?它是时钟上秒针的一格,也是电子时钟上数字的跳跃,但是1秒钟到底是多久,恐怕并没有多少人知道,也没有多少人关心。但科学家们对于精准时间的追求从未停止,目前世界上最准的时钟当属光_飞秒光学频率梳

bootstrap modal 垂直居中对齐_modal-dialog 浏览器居中 backdrop : 'static-程序员宅基地

文章浏览阅读830次。转载自:http://hbiao68.iteye.com/blog/2213168文章参考http://www.bubuko.com/infodetail-666582.htmlhttp://v3.bootcss.com/javascript/#modals Html代码 div class="modal fade" id="sqh_m_modal-dialog 浏览器居中 backdrop : 'static