C++ vector的大小(Size)和容量(Capacity)

1 大小和容量

        vector优异效率的秘诀之一,就是分配出“较其容纳的元素”更多的内存。为了能够高效运用vector,你应该了解大小和容量之间的关系。

        vector提供用以操作大小的函数有size()、empty()和max_size()。另一个与大小有关的函数是 capacity(),返回vector实际能够容纳的元素量。如果超越这个量,vector就有必要重新分配内部内存。

1.1 内存空间只会增长,不会减小

        vector在增加内部元素时会预留出更多的空间以容纳后面新加元素的存放,当现有容量不足以容纳新加元素时,会再分配出新的多出可容纳现有元素的空间。vector的实际容量不会随着内部元素的删除而减小。

1.2 reference、pointer和iterator失效

        即使删除元素,其reference、pointer和iterator也会继续有效,继续指向动作发生前的位置。然而安插动作却可能使reference、pointer和iterator失效。swap()和shrink_to_fit()也会使reference、pointer和iterator失效。

2 缩减容量以符合元素个数

2.1 shrink_to_fit()(C++11)

        可以缩减容量以符合当前的元素个数。但是这个请求不具强制力,具体缩减和优化情况取决于编译器。会使reference、pointer和iterator失效。

2.2 vector<类型>(temp_vector).swap(temp_vector)

        这种操作比较直接,但是也会使reference、pointer和iterator失效。

3 释放vector的内存

3.1 clear()后调用shrink_to_fit(),取决于编译器(可能释放不完全)

temp_vector.clear();
temp_vector.shrink_to_fit();

3.2 clear()后swap()(推荐)

temp_vector.clear();
vector<类型>(temp_vector).swap(temp_vector);

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值