【c++】reserve与resize的区别

18 篇文章 1 订阅
订阅专栏
本文详细介绍了C++中string类的reserve和resize两个成员函数。reserve主要用于预留内存空间,保证至少有指定数量的容量,而resize则改变字符串的大小,可以缩短或延长字符串,并可指定填充字符。resize在增加字符串长度时,若需扩展capacity,会按照一定比例(如1.5倍)进行扩容。
摘要由CSDN通过智能技术生成

     

目录

一、reserve

        1.reserve,直译过来是保留的意思,所以我把他理解成最少需要为当前的string保留这么多个空间。

         2.为什么并不是我们想要预留的空间?

       结论:

二、resize

        1.resize,直译过来就是改变大小的意思,所以我的理解是改变了string中的size(有效字符的个数)。​编辑

        如果给定n比原来的字符串短,那么就截断。

        如果给定n比原来的字符串长,并且没有给第二个参数c,那就用'\0'填补剩下的空间。 

  如果给定n比原来的字符串长,且给了第二个参数c,那就用此参数进行初始化追加的空间。(若给的size比当前capacity大,那也会改变capacity,这时是同reserve相同的规则)

        结论:


  最近整理笔记时,发现c++中的string类有两个成员函数reserve与resize的英文名翻译出来很像,于是特地查了一下cplusplus,现总结如下:

一、reserve

        1.reserve,直译过来是保留的意思,所以我把他理解成最少需要为当前的string保留这么多个空间。

 

 

代码如下:

        在s1中我想保留20个字节的空间,编译器为我预留了31(32,还有一个'\0')字节的空间,而不是整20字节。

        在s2中我想保留10个字节的空间,编译器为我预留了15(16,同上)字节的空间,而不是我想要的10字节。

         2.为什么并不是我们想要预留的空间?

        

        我创建了一个空字符串s3,可见默认给的capacity(有效字符容量)就是15,说明vs在写string类时,给了缺省值15。

        我接下来看了编译器怎么实现扩容操作的:

代码如下:

         

        由此可知,编译器在字符串剩下的空间不够用时一般进行的是1.5倍扩容。

       结论:

         综上,可以知道这个reserve函数进行的操作是:我为你预留空间,大于或者等于你给的这个数。 

二、resize

        1.resize,直译过来就是改变大小的意思,所以我的理解是改变了string中的size(有效字符的个数)。

代码如下:

        如果给定n比原来的字符串短,那么就截断。

 

        如果给定n比原来的字符串长,并且没有给第二个参数c,那就用'\0'填补剩下的空间。 

 

  如果给定n比原来的字符串长,且给了第二个参数c,那就用此参数进行初始化追加的空间。(若给的size比当前capacity大,那也会改变capacity,这时是同reserve相同的规则)

        结论:

        综上,可以得出resize的作用是改变字符串的size,如果给定的n比size小,那就截断;

如果大,那就加长size(也可能改变capacity)。

 

 

 

 

        

vector的扩容原理、resize与reserve区别
太阳当空照,花儿对我笑,微风轻轻拂,心情无限好。
02-12 1085
vector 存储的空间在内存中是连续的,如果 vector 现有空间已存满元素,在 push_back 新增数据的时候就要分配一块更大的内存,将原来的数据 copy 过来,接着释放之前的内存,再在新的内存空间中存入新增的元素。不同编译器对 vector 的扩容方式实现不一样,在 vs 中以 1.5 倍扩容,而在 gcc 中以 2 倍扩容,后面我们会看到以 1.5 倍扩容的方式效果更好。
vector中reserveresize区别
wuxiecsdn的博客
03-09 4010
vector中reserveresize区别 一、基本概念 1、capacity 指容器在分配新的存储空间之前能存储的元素总数。 2、size 指当前容器所存储的元素个数 二、reserveresize 1.区别 1、reserve()只修改capacity大小,不修改size大小, 2、resize()既修改capacity大小,也修改size大小。 注意:resize只会在修改后的size()大小大于当前capacity()大小时才会修改capacity大小,比如下面情况就不会修改capacity:
C++resize和reserve区别
yishizuofei的博客
07-11 1万+
首先分清楚两个概念: 1.capacity:该值在容器初始化时赋值,指的是容器能够容纳的最大的元素的个数。还不能通过下标等访问,因为此时容器中还没有创建任何对象。 2.size:指的是此时容器中实际的元素个数。可以通过下标访问0-(size-1)范围内的对象。 就比如说一个瓶子的容量是600ml,意思是它最多可以装600ml,而不是说现在瓶子里就有600ml,这里的600ml就相当于capacit...
C++ 102 之 reserve预留空间
最新发布
LSG_Dawn的博客
06-28 124
【代码】C++ 102 之 reserve预留空间。
C++】reserve( ) 和resize( ) 函数的区别(小结)
ly_6699的博客
04-30 3243
**显然,** reserveresize的共同点如下: - 当 填写的n值<=当前值 时,都不会缩减容器本身的容量,即对原内存空间并无影响。 - 当 填写的n值>当前值 时,都会增大容器本身的容量 即capacity会变化。 reserveresize区别点如下: - reserve在不能改变容器容量时,什么都不做;reserve在能改变容器容量时,只会增加capacity即容器冗余量,但容器的size不会变化。 - resize在不能改变容器容量的时候,有可能增加/减少了元素个数即size(
vector.resize 与 vector.reserve区别
清流弯弯
12-23 3万+
reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。再者,两个函数的形式是有区别的,reserve函数之
C++ vector的reserveresize详解
gongweidi的博客
01-20 728
vector 的reserve增加了vector的capacity,但是它的size没有改变!而resize改变了vector的capacity同时也增加了它的size! 原因如下: reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用push_back()/insert()函数。 ...
c++ vector reserveresize
星空点点
04-08 168
c++ vector reserveresize
C++ vector中的resize,reserve,size和capacity函数讲解
热门推荐
阿木寺的博客
07-18 5万+
前言 在介绍resize(),reserve(),size()和capacity()函数之前,先简单介绍一下c++中vector的概念。 vector:顺序容器(可变大小数组)。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢。 既然vector是个容器,那么一定相关特性,如添加元素、删除元素和查询容器大小等操作。本文重点介绍vector中的resize(),reserve(),si...
C++基础篇 -- vector的resize函数和reserve函数
尉迟琼楼的博客
01-14 2万+
对于C++的vector容器模板类,存在size和capacity这样两个概念,可以分别通过vector的size()和capacity()方法获得该vector当前的size和capacity值。相应的,vector提供了两个方法来分别对size和capacity进行操作,它们就是resize方法和reserve方法。 首先,对于size和capacity,这是两个比较容易混淆的概念。
C++resize()和reserve()的区别
sunxiaopengsun的专栏
06-24 241
https://blog.csdn.net/koudaidai/article/details/7174591?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
string.reserve 与 string.resize区别
FreeCloud_InSky的专栏
07-25 1万+
string中有两个函数:reserve()和resize(),最近细细的看了下这两个函数的使用,记录下来。
reserveresize
lusic01的专栏
04-01 426
C++ vector的reserveresize详解 vector 的reserve增加了vector的capacity,但是它的size没有改变!而resize改变了vector的capacity同时也增加了它的size! 原因如下: reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用p...
c++ resize&reserve
AplusX
08-22 246
resize(),设置大小(size); reserve(),设置容量(capacity); size()是分配容器的内存大小,而capacity()只是设置容器容量大小,但并没有真正分配内存。 打个比方:正在建造的一辆公交车,车里面可以设置40个座椅(reserve(40);),这是它的容量,但并不是说它里面就有了40个座椅,只能说明这部车内部空间大小可以放得下40张座椅而已。而车里面安装了4...
C++resize()和reserve()
心之王者的博客
08-17 2447
resize()影响size(),在需要扩容时会影响到capacity()。 reserve()影响capacity(),不会影响size()。
Resize 和 Reserve区别
island1314的博客
05-30 1014
resize()影响size(),在需要扩容时会影响到capacity()。reserve()影响capacity(),不会影响size()。
写文章

热门文章

  • C++ 不能在成员函数 的类外部重新声明该函数 8133
  • 【动态规划】01背包问题(手画图解) 6919
  • 【动态规划】01背包问题(滚动数组 + 手画图解) 6275
  • 【c语言】对结构体数组按照某项规则进行排序 5015
  • CentOS 7忘记密码怎么办? 4034

分类专栏

  • 算法 3篇
  • javaEE 16篇
  • 数据结构 12篇
  • 操作系统 4篇
  • java 15篇
  • Spring 3篇
  • 问题解决 1篇
  • web前端 1篇
  • 数学建模 1篇
  • 十大排序 12篇
  • 刷题之路 9篇
  • c++学习路程 18篇
  • 数据库 1篇
  • 计算机组成原理 7篇
  • c语言学习笔记 11篇
  • MySQL 3篇
  • python 1篇
  • 自制游戏 2篇

最新评论

  • 【c++】vector实现(源码剖析+手画图解)

    穹笼: 为什么reserve还有改进版?哪个是源码的逻辑呢?

  • 【Java EE】统一功能返回

    CSDN-Ada助手: 不知道 Java 技能树是否可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java

  • 【Spring】Springmvc学习Ⅲ

    普通网友: 写的真好,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 【Spring 】Spring MVC 入门Ⅱ

    普通网友: 引领技术潮流,是不可多得的好文,十分值得借鉴和参考。期待博主未来能够持续分享更多好文【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 【Linux】解决虚拟机于主机不能共享文件的问题

    一个平凡而乐于分享的小比特: 博主的文章是我每次学习的指南,总是解答了我遇到的问题。支持博主优质文章,讲解得非常详细,干货满满,通俗易懂,期待博主下次更新。感谢博主的付出,期待更多的精彩内容!

大家在看

  • 基于django+vue基于HTML5的农业信息学习平台【开题报告+程序+论文】-计算机毕设
  • SpringCloud-07 GateWay01 网关技术
  • 战神5诸神黄昏修改器3DM版下载及使用教程
  • 基于python+flask框架的基于智能匹配的体育场馆预约系统APP(开题+程序+论文) 计算机毕设
  • 网络安全(黑客)——自学2024

最新文章

  • 【算法】算法思想合集
  • 【Java EE】统一功能返回
  • 【Java EE】DispatcherServlet源码分析
2024年26篇
2023年113篇
2022年13篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家哈尔滨玻璃钢雕塑品牌好山东玻璃钢雕塑供应商四川特色商场美陈售价深圳户外商场美陈哪家好玻璃钢浮雕雕塑厂家定制浙江通道商场美陈研发公司海南玻璃钢小羊动物雕塑兰州雕塑玻璃钢雕塑厂家青蛙玻璃钢雕塑玻璃钢花盆养什么花宿迁玻璃钢动物雕塑设计佛山玻璃钢工艺雕塑厂海南小区玻璃钢雕塑定制宁夏玻璃钢雕塑售价仿铜玻璃钢雕塑生产厂家湖南玻璃钢雕塑订做价格广东加工玻璃钢雕塑费用湖南不锈钢镂空玻璃钢彩绘雕塑西安景区玻璃钢雕塑销售厂家青海玻璃钢卡通人物雕塑梅州玻璃钢楼盘景观雕塑供货商虹口区拉丝玻璃钢雕塑服务介绍集美园林玻璃钢雕塑南京玻璃钢动物雕塑曲阳玻璃钢卡通鸡雕塑青海玻璃钢商场美陈雕塑商场主题气球美陈宿迁商场美陈策划玻璃钢蒙古马雕塑淮安商场秋季美陈香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化