list与vector的区别

本文对比了STL中的两种容器——vector和list,分析了它们的底层结构、随机访问、插入删除效率、空间利用率、迭代器特性和失效情况。vector适合随机访问和高效存储,而list在插入删除操作上更优,但不支持随机访问。选择使用哪种容器取决于具体应用场景。
摘要由CSDN通过智能技术生成

list与vector都是STL中的容器,vector是表示可变大小数组的序列容器。 就像数组一样,vector采用的连续存储空间来存储元素。而list的底层结构是链表。因此连个容器的底层不同,因此他们表现也不同。我们从七个方面进行总结(详细知识点与实现):

vectorlist
底层结构动态顺序表,他是一段连续的空间, 就像数组一样,vector采用的连续存储空间来存储元素。他底层的实现是一个带结点的双向链表。
随机访问支持随机访问,访问效率为O(1)。不支持随机访问,访问摸个元素的效率为O(n)。
插入删除

支持随机插入与删除,但是效率极低,时间复杂度为O(n),且一定情况下进行插入时需要扩容(扩容:开辟新空 间,拷贝元素,释放旧空间,导致效率更低)。

vector<int>::iterator支持“+”,“+=”,“<”等操作符

任意位置插入删除效率高,时间复杂度为O(1),且插入时不需要元素搬移。

list<int>::iterator则不支持“+”、“+=”、“<”等

空间利用率底层空间连续,不易造成内存碎片,空间利用率高,缓存利用率高。它的底层时动态开辟的,小结点容易造成内存碎片,空间利用率和缓存利用率都低。
迭代器原生态指针。list的迭代器不能是原生态指针,如果是原生态指针就无法结束,因此要对原生态指针(结点指针)进行封装。
迭代器失效当插入元素时会失效,因为插入元素可能造成重新扩容,导致原来的迭代器失效;删除时,当前迭代器需要重新赋值,否则可能会失效。插入元素不会导致迭代器失效, 删除元素时,只会导致当前迭代 器失效,其他迭代器不受影响。
应用场景需要高效存储,支持随机访问,不关心插入删除效率。当进行大量插入和删除时,不关心随机访问。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值