这个问题的本质还是在问顺序表和链表的区别 底层结构不同 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,因为它头插和头删的效率比较低