【发布时间】:2012-11-26 14:42:55
【问题描述】:
根据 Bjarne Stroustrup 的 slides 来自他的 Going Native 2012 keynote,std::list 中的插入和删除在现代硬件上非常低效:
向量节拍列表海量用于插入和删除
如果确实如此,std::list 还剩下哪些用例?那不应该被弃用吗?
【问题讨论】:
-
不可失效的迭代器和引用,只要该特定元素未被删除。
-
您假设选择列表的唯一原因是插入性能。事实上,我认为存储持久性是人们应该选择列表的主要原因。
-
我也质疑这些结果。从链表中插入和删除应该是
O(1),而对于向量来说是O(n)。 -
@Walter 该图实际上只是邀请查看链接的幻灯片。
-
该图涉及两个操作的总和。找到要删除的元素,然后将其删除。在这两种情况下,结果都是 O(n)。删除对于列表来说是 O(1),对于向量来说是 O(n),但是向量的操作在列表的一半以下有一个常数因子。该测试是有效的,因为您通常必须在擦除之前找到要擦除的元素。它不会过时,因为有时这不是真的。
标签: c++ performance vector containers doubly-linked-list