【C++】resize()和reserve()


前言

resize()reserve()函数是用于控制vector对象的大小和容量的,但使用起来是有区别的,为避免弄混,给大家详细解释一下两个函数的用法。


一、resize()

resize()函数是用于改变vector对象的大小的,也就是说,改变它包含的元素的个数,即size()
如果新的大小比原来的大小大,那么多出来的元素会用默认值或者指定值进行初始化。
如果新的大小比原来的大小小,那么多余的元素会被删除。
resize()函数会影响vector对象的size(),当容量不够需要扩容时则同时会影响到capacity()

void resize (size_type n);
void resize (size_type n, const value_type& val);

1.参数

n:
以元素数量表示,新的容器大小,即容器的size()为n。
成员类型size_type是无符号整数类型。
val:
当n大于当前容器大小(size())时,将其内容复制到添加的元素中。
如果未指定,则使用默认构造函数
成员类型value_type是容器中元素的类型,在vector中定义为第一个模板参数(T)的别名。

2.返回值

无。

如果发生了重新分配,则使用容器的分配器分配存储空间,这可能会在失败时抛出异常(对于默认分配器,如果分配请求不成功,则抛出bad_alloc)。

二、reserve()

reserve()函数是用于改变vector对象的容量的,也就是说,改变它在不重新分配内存的情况下可以容纳的元素的最大个数,即capacity()
如果新的容量比原来的容量大,那么vector对象会分配更多的内存空间,以避免后续插入元素时发生内存重新分配。
如果新的容量比原来的容量小,那么reserve()函数不会做任何事情。reserve()函数不会影响vector对象的size(),但会影响它的capacity()。

void reserve (size_type n);

1.参数

n:
向量的最小容量。
注意,得到的向量容量可能等于或大于n
成员类型size_type是无符号整数类型。

2.返回值

无。

如果请求的容量大于最大容量(vector::max_size),则抛出length_error异常。
如果发生重新分配,则使用容器的分配器分配存储空间,这可能会在失败时抛出异常(对于默认分配器,如果分配请求不成功,则抛出bad_alloc)。


总结

resize()影响size(),在需要扩容时会影响到capacity()。
reserve()影响capacity(),不会影响size()。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心之王者716

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值