彻底搞清vector的使用机制

1.重要的是要认识size() 是vector当前能合理访问的元素数,capacity()是vector实际内存占用的大小.

  • 删除操作clear 或者erase只是改变了size,而实际的内存占用还是原来的最大占用。如果用index去访问还是可能访问到的。
  • clear():的作用实际上是通过将size()设置为0,而内存不变,当下次push的时候会去把对应位置的内存进行覆盖。
  • erase():改变size()减1,内存左移,大小不变
  • resize(n)改变的是size大小为n,如果n<capacity()的大小,内存不变,若n>capacity()会将内存扩充到n,并将新增的内存赋予默认值。
  • reserve(n)改变的是capacity大小,而size不变。

例子:
初始vec: size为5;capacity为5;内存为 {1,2,3,4,5}
clear之后: size为0;capacity为5;内存为 {1,2,3,4,5} 此时访问vec[2]、vec[4]等都能访问到
push_back(6):size为1;capacity为5;内存为 {6,2,3,4,5} vec[0]的内存值被覆盖。
push_back(7) size为2;capacity为5;内存为 {6,7,3,4,5} vec[1]的内存值被覆盖。

初始vec: size为5;capacity为5;内存为 {1,2,3,4,5}
erase掉第一个值:size为4;capacity为5;内存为{2,3,4,5,5}
erase掉第一个值:size为3;capacity为5;内存为{3,4,5,5,5}
erase掉第一个值:size为2;capacity为5;内存为{4,5,5,5,5}

那么我们想在用的时候彻底清空内存要怎样操作呢,比如vector<int> test可以进行如下操作清空内存

vector<int>().swap(test)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值