vector | list | |
---|---|---|
底层结构 | 动态顺序表,连续的空间 | 带头节点的双向循环链表 |
访问元素 | 支持随机访问,访问效率O(1) | 不支持随机访问,访问元素效率O(N) |
插入 | 尾插效率O(1),其他位置插入要移动数据,效率低 | 不需要移动节点,任意位置插入效率O(1) |
删除 | 尾删效率O(1),其他位置删除要移动数据,效率低 | 不需要移动节点,任意位置删除效率O(1) |
空间利用率 | 底层空间连续,不易造成内存碎片,空间和缓存利用率高 | 底层节点空间不连续,易造成内存碎片,空间和缓存利用率低 |
迭代器 | 原生态指针 | 封装的节点指针,内部实现了一系列运算符重载 |
迭代器失效问题 | 插入和删除都会造成迭代器失效详细过程参考该文章中vector迭代器失效部分 | 插入不会造成迭代器失效,删除会使当前节点迭代器失效,不影响其他位置的迭代器 |
使用场景 | 需要随机访问和较高的空间利用率,不在乎插入和删除的效率 | 需要频繁插入删除数据,不在乎随机访问的效率 |
C++中vector和list的区别
最新推荐文章于 2023-06-14 20:02:50 发布