c++ vector 一部分_C++ vector 使用注意事项

1、初始化

c++ 11以后新增了大括号{}的初始化方式,需要注意与()的区别,如:

std::vector<int> vecTest1(5); //初始化5个元素,每个都是0

std::vector<int> vecTest2{ 5 }; //初始化1个元素,值是5

2ef583cda7fc1d7b65369c83f6b3b208.png

2、添加元素:push_back

通过push_back添加新的元素进入vector后,vector的内存有时候会发生变化,这取决于size和capacity大小,当然这些都是系统来处理的,详细可以参考stl源码

当size<capacity的时候,直接加到末尾,不会变化

当size==capacity的时候,会重新申请另外一块内存,然后copy过去加到尾部,这个时候就会有变化了。

对于stl的容器,都有成员:

begin() //起始位置

end() //结束位置

size() //当前大小

capacity() //当前容量,即已申请的内存大小

vector是一段连续的内存空间,有三个标识内存的位置,start,end,finish, size=end-start, capacity=finish-start

很多时候在使用vector的时候,会看到size=capacity,这个时候直接添加元素到尾部,内存明显是不够的,此时会重新在别处分配一块大小足够

有时候也有size<capacity, 这个时候就直接加在尾部了。

9c15709066cf5c2d51b3f778a2b1d9e9.png

16c9d59f4a9a828ad992a19440dd564a.png

3、关于earse和remove

erase返回的是当前删除的元素的一下个位置的迭代器,所以需要注意的是遍历时候的++运算,这个与其它list,map差不多,

需要注意的earse后内存并未真正的清空,仅仅是删除内容,真正的容量大小capacity并没有改变,需要通过swap来实现capacity的减小

全部清空可以考虑:vector<int>().swap(vecNum);

2de99a87ff3eda61d65441388d8b8806.png

fb0014ce00fcf5682c884c7b1ad59878.png

//remove只是通过迭代器的指针向前移动来删除,将不需要删除的元素往前移,因此需要删除的就都在尾部了

//返回新的指向尾部需要删除的元素的迭代器

因此还是得配合earse来使用,所以一般真要删除,建议直接遍历使用earse

05ccbf88545eaa4d0ef6678eabdd043f.png

4、关于vector< bool> -- 慎用

出处: https://blog.csdn.net/DoronLee/article/details/78462208

vector< bool> 并不是一个STL容器,不是一个STL容器,不是一个STL容器!

首先vector< bool> 并不是一个通常意义上的vector容器,这个源自于历史遗留问题。

早在C++98的时候,就有vector< bool>这个类型了,但是因为当时为了考虑到节省空间的想法,所以vector< bool>里面不是一个Byte一个Byte储存的,它是一个bit一个bit储存的!

因为C++没有直接去给一个bit来操作,

所以用operator[]的时候, 正常容器返回的应该是一个对应元素的引用,

但是对于vector< bool>实际上访问的是一个”proxy reference”而不是一个”true reference”,返回的是”std::vector< bool>:reference”类型的对象。

因此,使用auto自动类型推导时会出现问题

0f97a08197b81bce652ba7ffef9990b9.png

e30b4a454f9564b3c0fc9fe6e3601d8b.png

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

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

相关文章

java list 取前3个_用java 截取字符串,每三个一组

展开全部以下是将一长串数字分组用逗号隔开,每三个一组,转化为字符串.例如:2345678--->2,345,67823--->23private static String convert(long space) {String str String.valueOf(space);StringBuilder builder new StringBuilder(str);str builder.reverse().toStri…

react打包后图片丢失_React中型项目的优化实践

本文可能涉及的内容--项目介绍整个项目大概有60个页面&#xff0c;用到的组件大概150&#xff0c;package里面的依赖大概有70个&#xff0c;应该勉强算得上是一个中型的React的项目了。下面给大家看看我们现在build一次项目的结果--打包时间约150s&#xff0c;打包完之后的资源…

HH SaaS电商系统的商品入仓功能需求说明

文章目录租户添加入仓商品商城添加入仓商品总店添加入库商品分店添加入库商品供应商添加入库商品租户添加入仓商品 点击“选择商品入仓”可以看到全部所属供应商及租户自供的商品&#xff0c;具体数据在“SKU供应信息表”查询&#xff0c;所属租户ID匹配&#xff0c;且所属平台…

cuba.platform_CUBA Platform 6.3的新增功能

cuba.platform我们很自豪地宣布新版本的CUBA平台和Studio全面上市&#xff01; 也许这是有史以来功能最丰富的平台版本之一–在各个级别上都有重要的变化&#xff1a;体系结构&#xff0c;可扩展性&#xff0c;API可用性和性能。 本文介绍了该平台的主要增强功能。 发行说明中…

java annotation应用_Java Annotation高级应用

前言&#xff1a;在此行文《java annotation高级应用》&#xff0c;具体实例化解释annotation和annotation processing tool(APT)的使用。望能对各位的有所帮助。一、摘要&#xff1a;《java annotation高级应用》具体实例化解释annotation和annotation processing tool(APT)的…

如何通过命令终端访问本地/局域网/远程的MySQL数据库_访问数据库_连接数据库_登录数据库

文章目录Windows系统下访问本地MySQL数据库访问远程主机的MySQL数据库本地安装了MySQL数据库本地没有安装MySQLLinux系统下退出数据库登录Windows系统下 访问本地MySQL数据库 使用命令终端访问本地MySQL数据库&#xff0c;打开终端直接输入以下命令语句&#xff1a; mysql …

科大讯飞 jason word_2019科大讯飞全球1024开发者节开幕啦

2019年10月24日&#xff0c;属于开发者的共同节日2019科大讯飞全球1024开发者节于合肥滨湖国际会展中心盛大启幕。以“A.I.前进&#xff0c;拼世界”为主题的本届大会&#xff0c;将集结120位行业大咖主题演讲、20场行业分论坛详解全域A.I.&#xff0c;科大讯飞的1024计划3.0、…

多线程线程池的实现java_如何在Java中实现线程池

多线程线程池的实现java线程是独立程序的执行路径。 在java中&#xff0c;每个线程都扩展java.lang.Thread类或实现java.lang.Runnable。 多线程是指在一个任务中同时执行两个或多个线程。在多线程中&#xff0c;每个任务可以有多个线程&#xff0c;并且这些线程可以异步或同步…

java timestamp是什么类型_JAVA比较2个Timestamp类型的时间大小-由此引发的思考

今天忽然要对2个Timestamp变量的类型进行比较。没怎么用过&#xff0c;百度发现居然很多都是转换类型的。后面发现Timestamp自己都有方法进行比较。但是百度一堆都是那些要转换类型的。我就想简单的知道2个Timestamp的时间哪个早哪个晚嘛。经过自己的百度的验证&#xff0c;终于…

Windows 使用命令执行 sql 脚本文件

文章目录MySQL 数据库方法一&#xff1a;使用 mysql 命令方法二&#xff1a;使用 source 命令Oracle 数据库MySQL 数据库 方法一&#xff1a;使用 mysql 命令 未配置 MySQL 的环境变量&#xff0c;则需要进入 MySQL 的 bin 目录下才能执行 mysql 命令已配置 MySQL 的环境变量…

windows系统连接同局域网下的其他电脑mysql等服务

一、首先设置被连接的mysql服务的 root 用户及访问权限&#xff08;必须确保连接用户拥有不限ip访问权限&#xff09; 参考&#xff1a;https://blog.csdn.net/hkl_Forever/article/details/127543546 二、配置被连接电脑的防火墙、网络共享、设置出入端口规则等 1、打开防火墙…

java中使用jython_将Jython嵌入到您的Java代码库中

java中使用jythonJython是一个使用相当可靠的语法的快速Java脚本的好工具。 实际上&#xff0c;当使用jmx为您的Java应用程序实现一些维护或监视脚本时&#xff0c;它的运行效果非常好。 如果您与其他具有python背景的团队合作&#xff0c;则将python集成到您的java应用程序是…

js如何获取jwt信息_谈房地产公众号如何涨粉?一篇文章让你轻松获取信息

原标题&#xff1a;谈房地产公众号如何涨粉&#xff1f;一篇文章让你轻松获取信息对于房地产企业来说&#xff0c;如何学会运营自己企业的房地产微信公众号是涨粉引流的关键一步&#xff0c;老话说&#xff1a;一步走好&#xff0c;步步稳。值得夸奖的是近几年中高端房地产企业…

java 统计数字个数_统计数字问题(Java)

Description一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排&#xff0c;每个页码都不含多余的前导数字0。例如&#xff0c;第6 页用数字6 表示&#xff0c;而不是06 或006 等。数字计数问题要求对给定书的总页码n&#xff0c;计算出书的全部页码中…

Windows 命令终端(CMD)的快捷键

这些快捷键只在Windows系统操作有效&#xff0c;连接远程Linux主机&#xff0c;再操作这些快捷键是无效的&#xff0c;因为连接远程的Linux主机后&#xff0c;你用的是Linux命令终端。 快捷键&#xff1a; F1&#xff1a;按F1逐字显示最后一次执行的命令 F2&#xff1a;按F2会…

java开发plc上位机软件开发_上位机开发之西门子PLC-S7通信实践

写在前面&#xff1a;就目前而言&#xff0c;在中国的工控市场上&#xff0c;西门子仍然占了很大的份额&#xff0c;因此对于上位机开发而言&#xff0c;经常会存在需要与西门子PLC进行通信的情况。然后对于西门子PLC来说&#xff0c;通信方式有很多&#xff0c;下面简单列举一…

boss直聘账号异常登不上_【苹果IOS游戏账号分享】据说是最欢乐的2D冒险游戏?Q萌有趣,好不好玩你说了算——惊奇剑士...

惊奇剑士游戏下载点击下方卡片下载游戏&#xff01;不会使用请点击《操作指南》↓↓↓↓本游戏是由1群的资源库&#xff1a;“hentai是绅士不是变态” 赞助我们购买的&#xff0c;感谢大家的鼎力支持&#xff0c;二哈替大家感谢下hentai是绅士不是变态。可甜可盐的小哥哥之前还…

jquery 延迟加载代码_延迟加载是一种代码气味

jquery 延迟加载代码您见过那些具有许多属性的巨大物体吗&#xff1f; 这些域对象由于不希望从数据库检索太多信息而在其中使用延迟加载&#xff1f; 我敢打赌你有这种令人怀疑的快乐。 今天&#xff0c;我想与您分享我对它们的印象- 使用延迟加载应被视为一种代码味道&#x…

inotify-java下载_inotify-java-2.1.jar

【实例简介】inotify能够对文件系统进行监控&#xff0c;书上举的例子都是c使用inotify的例子&#xff0c;难道没有Java版吗&#xff0c;肯定有&#xff0c;只不过要自己编译&#xff0c;在网上找到别人的博客有&#xff0c;但是人家不愿意分享&#xff0c;我就只能自己编译了&…

SQL语句执行顺序

文章目录SQL 简介SQL 语句的执行顺序重点SQL 简介 SQL 是 Structured Query Language 的缩写&#xff0c;称为结构化查询语言&#xff0c;SQL 是一种操作关系型数据库的规则&#xff0c;SQL 语句以分号结尾&#xff0c;不区分大小写&#xff0c;建议关键词使用大写。 SQL 语句…