vector相关总结

概述:

  • vector,可变大小的动态数组,属于顺序容器,在内存中是连续存储的,因此可以支持快速随机访问
  • vector/string在尾部添加(push_back)删除元素时很快,但是在其他位置(intert)插入元素时效率很低很耗时。原因:string/vector是连续存储的当向其他位置添加元素时,需要移动插入删除元素位置之后的元素来保证连续存储。

vector的内存分配机制:

当需要vector/string需要新的存储空间时,vector/string通常会分配比新空间更大的内存空间(具体实现细节与编译器的版本有关,linux通常为当前容量的2倍,vs2017为当前容量的1.5倍,1.5倍的好处是可以重用之前分配的空间,1,2,4,6当分配至6时,前面已经分配的空间为7可以重新利用之前的空间重新分配),将原来空间的元素复制到新空间中,并释放原来的内存,容器会将多分配的剩余空间作为备用,用来存储新的元素。这样,就不需要每次增加新元素都重新分配容器的内存空间,提高性能。

注:基于上述机制的vector内存扩张操作通常要比list,deque要好的多,因此在能用vector的前提下,尽量多使用vector。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值