list和vector的区别

本文详细比较了C++标准库中的两种容器:vector和list。重点介绍了它们的内存布局、迭代器类型、访问效率及扩展策略等特性,并讨论了在不同场景下选择合适容器的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector是联系内存容器,它为存储的对象分配一块连续的地址空间,内存布局与C完全相同。
在vecotor中插入或者删除某个元素,将影响到效率和异常安全性(除非是在容器的尾部)。
如果vector中存储的对象很大,或者构造函数复杂,则在对现有元素进行移动的时候开销会较大。
vector在每次扩张容量的时候,将容量扩展2倍。一旦空间重新配置,原迭代器将全部失效。
vector迭代器普通指针类型,因此为RandomAccess Iterator,因此对vector中的元素访问效率很高。
vector重载了[] 操作符。


list是双向链表,对象是离散存储的,它的迭代器是通过一个类模板实现,是Bidirectional Iterator,随机访问某个元素需要遍历list。
list只有在每当插入或者删除一个元素的时候,才分配或者释放相应的内存。
对于任何位置的插入、删除操作,list都是常数时间。且这些操作不会引起原有迭代器失效。因此,list的插入删除操作具有“事务语义”,是强异常安全的。
list没有重载[]操作符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值