对STL中vector以及list的理解

简介两种容器

vector与list同属c++标准库(STL)中的容器,其中vector为支持随机存储的可变长数组,list为双向链表容器能够高效的支持插入删除操作。

浅析vecotr容器

vector英文名字为向量,在c++语言中作为标准容器的一种形式存在,支持按照下表访问,并能够支持高效的在其尾部插入删除元素。

原理简介

vector作为可变长数组的代表,帮助我们不必为了担心空间不够而开很大的数组,可以高效的节省空间,它在工作的以后会事先向内存申请一个空间,用来存储元素,当内存不够的时候,vector会继续向内存申请一个空间,然后把它里面所有的元素迁移到新空间里面,最后释放掉原有的空间,由于重新分配空间是一个很耗时的操作,在vector内部进行了诸多优化,尽可能的降低了时间的成本。

注意事项

使用vector的注意事项:

  1. 合适的数组大小很重要,因为每当内存不够用的时候,vector会进行内存的重新配置,和vecotr相关的pointer,iterator都将会失效。
  2. 重新分配内存很耗时。

iterator失效的原因

  1. 内存重新配置。
  2. 在下标较小的位置插入或者删除了一个元素。
  3. 删除当前iterator之后会返回下一个元素的iterator所以删除之后不能it++,否则在删除最后一个元素的时候会访问一个未知的内存空间,导致溢出,list中则不会发生。

浅析list容器

list容器在STL中作为链表(双向链表)的代表,不支持随机存取,但是可以高效的插入或者删除元素。

原理简介

list始终保持元素线性排列并能够高效的支持在任意位置插入删除元素,支持迭代器操作,但是在高频率的访问元素中list的效率并不如vector,但是list真正的优势在于它高效的插入删除中。

注意事项
  1. 删除元素一定要删除已经存在的元素,防止访问不存在的空间导致溢出。
  2. 插入元素的时候可以通过位置插入也可以通过迭代器插入。
iterator分析
  1. 由于list使用了不连续的内存分配方案,使得在删除当前元素的时候后面元素的迭代式不受影响,可以使用erase(it++)这种形式来删除。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值