STL学习

vector

vector 是一个自动扩容的容器,支持随机访问,底层通过动态数组实现。

扩容

vector 执行 insert 或者 push_back 时,如果当容器的存储数量已经达到容量,就会触发扩容。具体流程如下:

  1. 申请新的内存空间(原内存空间的1.5~2倍)
  2. 把原空间的元素拷贝到新的空间里
  3. 释放原空间
  4. 数组指针指向新空间
成员函数
  • size() : 容器中元素的个数
  • capacity() : 器在分配那块内存上可以容纳的元素的个数
  • resize(n) : 强制将容器改为容纳为 n 个数据,分三种情况讨论:
    1. n < size() : 容器尾部元素被销毁
    2. n > size() : 新构造的元素会添加到末尾
    3. n > capacity() : 在元素加入前会进行重新分配
  • reserve(n) : 强制容器把它的容量改为不小于 n 。如果 n 小于当前容量,则 vector 会忽略它

resizereserve 都保证了 vector 空间的大小,至少达到它们参数所指定的大小。

push_backemplace_back 区别

emplace_backpush_back 的区别,就在于底层实现的机制不同。

  • push_back 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);
  • emplace_back 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。

参考自:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值