vector的内存管理

内存管理

Vector 是STL中最常见的容器, 它占用的是一块连续分配的内存 ,vector是动态分配空间的。vector 管理的是一块线性的、可动态增长的内存。随着元素的不断增加,,它会按照自身的一套增长机制不断扩充自身的容量。一般来讲,如果容量不够时,它会将现有容量扩大一倍。

由于Vector 容器分配的是一块连续的内存空间, 当需要扩容时,它会在内存中重新分配一块比现有内存大一倍的内存出来,将现有的元素全部复制到新的内存块中,同时将原有的内存空间释放掉。

内存回收

vector的内存空间只会增长,不会减小,比如一个vector<int>的对象vec ,现有100个数据,突然之间删掉了90个,于是空出了90*4个字节的空间,vector不会将空间缩小,而是保持不变。 只有当vector撤销时,调用析构函数来回收之。但是即使clear(),vector所占用的内存空间依然如故,无法保证内存的回收。

性能分析

vector事实上是一个动态的数组,它支持随机访问,所以对于查找操作来说,效率很高 ( 时间复杂度为 O(1)) 。而对于插入或删除操作,需要移动数据,所以执行插入或删除操作 的效率会比较差,尤其是在vector对象的开始处操作时 (最坏时间复杂度为 O(n)),当数据量很大时,这种低效的情况将表现的更加明显。所以应该尽量避免在vector对象的头部插入或者删除元素。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值