根据Stroustrup的矢量与列表

Vector vs list according to Stroustrup

本文关键字:列表 Stroustrup 根据      更新时间:2023-10-16

可能的重复:
您何时更喜欢使用std :: list< t>而不是std :: vector< t>?

我刚刚看过Bjarne Stroustrup的《潮流》的录音。我有点困惑。

在这次演讲中,他特别讨论了vector vs list问题,并建议在许多情况下,即使您插入并插入并从中间插入/从中间插入/删除,vector也更快,因为编译器可以优化很多东西并像紧凑的结构一样。结论(我理解)是:首先使用vector,然后再考虑您是否还需要其他东西。这听起来很合理,但是考虑到第一个观察,我应该考虑哪些标准?我一直认为,如果您深入插入/删除 - 使用列表。这里的某些主题提出了类似的建议。参见

STD :: Vector vs. STD :: List与STD :: SLIST的相对性能?

向量与stl中的列表

现在根据stroustrup,我错了。

当然,我可以写一些测试,并试图弄清在每种特定情况下要使用的方法,但是有理论方式吗?

偏爱 std::list而不是 std::vector的最重要动机是迭代器的有效性,不是性能。如果在插入或擦除时,您将其他迭代器带入容器中,则可能需要std::list,因为它插入不会使任何迭代器无效,并且擦除仅将迭代器无效地删除到所删除的元素中。大约唯一一次std::list会赢得绩效的时间是复制和分配非常昂贵,在这种情况下,修改包含类以降低复制和分配成本而不是切换到std::list通常是一个更好的选择。