vector与list的区别

vector与list的区别

1. 两者的定义

vector

连续存储的容器,动态数组,在上分配空间。底层数据结构是数组

vector两倍容量增长

vector插入元素时,如果未超过当时的容量,则直接添加到最后,然后调整迭代器

vector插入元素时,如果超过当时的容量,会重新分配两倍原来大小的空间,然后将原空间的元素通过复制的方式初始化新的空间,再向新空间增加元素时。最后析构并释放原有的空间,之前的迭代器也会失效

list

动态链表,在上分配空间。底层数据结构是双向链表

2. 两者区别

比较项vectorlist
底层实现数组双向链表
随机访问支持不支持
顺序内存不是
顺序内存不是
中间插入是否存在内存拷贝有可能会,比如空间不够的情况不会
内存分配策略一次性分配好,不够时才进行2倍扩容list每次插入都会进行内存申请
插入性能在最后插入(空间够),很快;在最后插入(空间不够),需要内存申请和释放,以及对之前数据进行拷贝很快,一般是常数开销
删除性能在最后删除很快;删除中间元素需要移动其它元素很快,一般是常数开销
删除性能在最后删除很快;删除中间元素需要移动其它元素很快,一般是常数开销
适用场景经常随机访问,且不经常对非尾节点进行插入删除经常删除大量数据

3. 应用场景

vector 拥有一块连续的内存,因此支持随机访问,如果需要高效率的访问,而不在乎插入和删除的效率,使用vector

list拥有一段不连续的内存空间,如果需要高效率的插入和删除,而不关心访问效率,使用list

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

博可睿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值