vector内存释放方法

vector容器是自增长的。一般的,在容器对象中insert或push一个元素时,该对象的大小增加1。.

而且vector中的元素是连续存放的,当在容器中增加一个新元素时,如果原来的储存空间刚好被用完,那么系统需要重新寻找一个更大的连续储存空间,把原来的元素复制到新空间,并在最后添加新元素,最后再撤销旧空间。更特殊情况下,假设每次vector添加一个元素时,空间都被用完,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧空间,这样性能难以接受。因此STL实现者在对vector进行内存分配时,其实际分配的容量要比当前所需的空间多一些。就是说,vector容器预留了一些额外的存储区,用于存放新添加的元素,这样就不必为每个新元素重新分配整个容器的内存空间。

关于vector的内存空间,有两个函数需要注意:size()成员指当前拥有的元素个数;capacity()成员指当前(容器必须分配新存储空间之前)可以存储的元素个数。reserve()成员可以用来控制容器的预留空间。

每当系统预先分配一块capacity大小的空间,当插入的数据超过这个空间的时候,这块空间会让某种方式扩展,但是你删除数据的时候,它却不会缩小。

这样便造成一个问题,即使 你使用clear()函数清空容器,系统为容器分配的capacity大小的空间依然存在。

而调用reserve(0),也不能使容器的预留空间变为0。

所以在相关资料中有人提到以swap()函数来释放vector内存。

vector<int> ivec(5,2); //使用5

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值