【c++】reserve与resize的区别

     

目录

一、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)。

 

 

 

 

        

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值