C++ vector自动扩容时机

vector的底层内存模型就是一个数组,但vector的容量却是可以动态增长的。

当插入新的元素内存不够时,会自动扩容,不同的编译器扩容的倍数也不一样,Linux下通常为原容量的两倍。扩容之后将原来的元素拷贝到新的内存空间上,然后把原来的内存空间释放掉。

size 和 capacity

  • size代表当前容器内元素的个数。
  • capacity表示容器可以容纳的元素个数。这个数必然大于等于size,如果新插入元素的时候size等于capacity,说明已经没有额外空间来存储元素了,就需要扩容。


 

默认的扩容时机 

以下示例在ubuntu 2204上测试

容器初始化为空

  std::vector<int> v0;
  std::cout << "v0 capacity 0: " << v0.capacity() << ", size " << v0.size()
            << std::endl;

  for (int i = 1; i <= 130; ++i) {
    v0.push_back(i);
    std::cout << "v0 capacity " << i << ": " << v0.capacity() << ", size "
              << v0.size() << std::endl;
  }

v0 capacity 0: 0, size 0
v0 capacity 1: 1, size 1
v0 capacity 2: 2, size 2
v0 capacity 3: 4, size 3
v0 capacity 4: 4, size 4
v0 capacity 5: 8, size 5

v0 capacity 8: 8, size 8
v0 capacity 9: 16, size 9
...
v0 capacity 16: 16, size 16
v0 capacity 17: 32, size 17
...
v0 capacity 32: 32, size 32
v0 capacity 33: 64, size 33
...
v0 capacity 64: 64, size 64
v0 capacity 65: 128, size 65
...
v0 capacity 128: 128, size 1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值