vector与list都是STL序列式容器,由于底层实现原理不同,所以两个容器适用场景不同,我们在使用在使用两个容器时,不由得会将它们进行对比。
vector | list | |
---|---|---|
底层实现 | 动态顺序表,底层空间连续 | 双链表,底层空间不连续 |
插入与删除 | 插入与删除效率低,因为需要移动数据元素,时间复杂度为O(n) | 插入与删除效率高,不需要元素移动,时间复杂度O(1) |
空间利用率 | 底层空间连续,空间利用率高 | 空间不连续,空间利用率低,容易产生空间碎片 |
访问操作 | 支持随机访问,支持按下标访问 | 不支持随机访问,想访问只能从头遍历 |
迭代器 | 原生态指针 | 对原生态指针的封装 |
使用场景不同 | 空间小,需要随机访问 | 大量删除与插入操作,不需要随机访问 |
迭代器失效 | 扩容导致迭代器失效 | 删除导致迭代器失效 |