必要是什么网站,微网站分销,中国10大品牌网官网,小说推广平台有哪些这个问题的本质还是在问顺序表和链表的区别
底层结构不同
vector容器list容器一段连续的空间带头结点的双向循环链表
元素访问方式
vector容器list容器支持随机访问—O(1)不支持随机访问—O(N)需要扩容不需要扩容任意位置插入元素----O(N)–搬移元素O(1)
迭代器不同
vector…这个问题的本质还是在问顺序表和链表的区别
底层结构不同
vector容器list容器一段连续的空间带头结点的双向循环链表
元素访问方式
vector容器list容器支持随机访问—O(1)不支持随机访问—O(N)需要扩容不需要扩容任意位置插入元素----O(N)–搬移元素O(1)
迭代器不同
vector容器list容器类型:原生态的指针对原生态指针进行封装失效的场景:导致底层空间改变操作当前迭代器对应的结点没有了erase(it)erase(it)
空间
vector容器list容器需要扩容不需要扩容不扩容的话空间利用率高扩容不一定不扩容的话空间利用率低扩容不一定vector如果不new是在栈上的list结点是new出来的频繁向系统申请小的内存块可能会存在内存碎片。new的底层是malloc可能会有额外空间的浪费
缓存利用率 vector容器list容器比如上面的图cpu加载1时有可能把12345全部加载到缓存中这样效率更高底层连续而list加载时一次性加载可能就一两个元素底层不连续
应用场景
vector容器list容器高效存储—访问任意位置插入和删除操作比较多
接口不同
vector没有push_front,和pop_front因为它头插和头删的效率比较低