【发布时间】:2010-09-19 06:37:29
【问题描述】:
对于不需要随机访问列表元素的简单链表,使用std::list 代替std::vector 是否有任何显着优势(性能或其他方面)?如果需要向后遍历,在迭代其元素之前使用 std::slist 和 reverse() 列表会更有效吗?
【问题讨论】:
-
(迟到的评论,仅供记录):链接到 Bjarne Stroustrup 的讲座:“为什么你应该避免使用链接列表”,他声称向量总是比列表更好。他给出的原因是平均而言,对插入点的搜索占主导地位,而元素的移动(在向量中)相比之下是微不足道的。另外:缓存未命中,但这已经在下面的答案中提到了。视频:youtube.com/watch?v=YQs6IC-vgmo
-
尽管 list 几乎总是比 vector 慢(除了在进行高级拼接时),但有一次你绝对需要一个 list:稳定的迭代器。如果您需要保留始终指向同一元素的迭代器的副本(除非已删除),则这不是保证向量可以提供的(例如,对 push_back 的调用可以使所有迭代器无效)。使用内存池可以使列表的速度更接近向量的速度。
标签: c++ data-structures stl performance linked-list