vector与list的区别

1、vector
vector的底层实现是数组,它拥有一段连续的内存空间,并且起始地址不变,因此存取的效率较高。由于他的内存空间是连续的,所以在中间进行插入和删除的操作时,会造成内存块的拷贝,在空间不够的情况下,需要申请一块最够大的内存并进行内存的拷贝,也是基于这也原因,在vetcor的插入和删除是会造成迭代器失效,

vector的迭代器失效问题: 在插入元素的时候,若是内存空间不够,需要进行扩容,而增容后的pos还是指向原来的空间,但是原来的空间已经释放,这就会导致迭代器失效;(解决办法: 在插入前计算出相对的起始位置的相对距离,那么当插入时候用计算的距离还原pos进行插入)
在删除元素的时候,假设删除pos处的元素,然后再访问pos处的元素,此时是无法访问的,这就会导致迭代器失效。(解决办法: 使用返回值,返回删除后原来的位置。用到的时候,当删除后接收返回的迭代器。)

2、list
list的底层实现是双向链表,所以他的内存空间是不连续的,因此list的存取的效率比较低,但是基于链表的特性,list的插入和删除的效率非常高。

list的迭代器失效问题: list的插入不会导致迭代器失效,但是删除节点会导致迭代器失效,假设删除pos出的元素,迭代器++就会失效,因为需要通过当前结点来找到下一个结点的,当前结点已经释放,通过迭代器++就会失效(解决办法: 在实现erase的时候会返回删除后的后面的元素的迭代器。)

3、vector与list的区别
(1)vector 的底层实现是数组,而list的底层实现是双向链表
(2)vector支持随机存取,而list不支持随机存取
(3)vector是顺序内存,而list不是
(4)vector在中间进行插入删除元素时,会导致内存拷贝,而list不会
(5)vector是一次分配好内存,不够时再进行2倍扩容,而list每次插入新结点都会进行内存申请
(6)vector的随机访问性能好,但是插入删除的性能不好,而list 不支持随机访问,但是插入和删除元素的性能好

4、应用场景
若是需要高效的随机访问,不在乎插入删除的效率,使用vector
若是需要高效的插入和删除,而不在乎随机访问,使用list

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值