std::vector扩容解析

STL中的vector扩容原理

  • 新增元素:vector通过一个连续的数组存放元素,如该数组已经存满,需要重新分配一块内存,将原来的数据拷贝到新的内存中,释放之前的内存,然后再插入新的元素;
  • vector的对象被构建的时候,它的capacity是0,当push_back或insert第一个元素后,其capacity变为1;
  • 在对vector进行删除元素时,其capacity是不会发生变化的;
  • Linux下GCC的扩容方式是以2倍扩容的;

代码事例

#include<iostream>
#include<vector>

using namespace std;

int main(int argc, char** argv)
{
  vector<int> datas;
  cout << "vector datas capacoity: " << datas.capacity() << endl;
  for(int i = 0; i < 10; i++){
    datas.push_back(i);
    cout << "vector datas size: " << datas.size() << endl;
    cout << "vector datas capacity: " << datas.capacity() << endl;
  }
    //移除3个元素
    datas.erase(datas.begin()+2, datas.begin()+5);
    cout << "after erase, vector datas size: " << datas.size() << endl;
    cout << "after erase, vector datas capacity: " << datas.capacity() << endl;

  return 0;
}

//输出结果
vector datas capacoity: 0
vector datas size: 1
vector datas capacity: 1
vector datas size: 2
vector datas capacity: 2
vector datas size: 3
vector datas capacity: 4
vector datas size: 4
vector datas capacity: 4
vector datas size: 5
vector datas capacity: 8
vector datas size: 6
vector datas capacity: 8
vector datas size: 7
vector datas capacity: 8
vector datas size: 8
vector datas capacity: 8
vector datas size: 9
vector datas capacity: 16
vector datas size: 10
vector datas capacity: 16
//发现当vector中的数据删除是不会影像其capacity的
after erase, vector datas size: 7
after erase, vector datas capacity: 16

知乎上有一个关于C++ STL的内存扩容:
C++ STL中vector内存用尽后,为啥每次是两倍的增长,而不是3倍或其他数值?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值