可能重复:
When do you prefer using std::list<T> instead of std::vector<T>?
我刚刚观看了Bjarne Stroustrup对GoingNative'12演讲的录音。我有点困惑。
在本次演讲中,他特别讨论了vector
vs list
问题,并建议在很多情况下vector
更快,即使您在中间插入和强行插入也是如此,编译器可以优化很多东西,就像紧凑的结构一样。结论(据我所知)是:首先使用vector
然后再考虑是否需要其他东西。这听起来很合理,但考虑到第一次观察,我应该考虑哪些标准?我一直认为,如果你强烈插入/删除 - 使用列表。这里的一些主题也提出了类似的建议。参见
Relative performance of std::vector vs. std::list vs. std::slist?
和
现在根据Stroustrup我错了。
当然,我可以编写几个测试并尝试弄清楚在每种特定情况下使用什么,但是有理论方法吗?
答案 0 :(得分:17)
首选std::list
优于std::vector
的最重要动机是迭代器的有效性,不性能。如果在插入或擦除时,您有其他迭代器进入容器,那么您可能需要std::list
,因为它的插入不会使任何迭代器无效,并且擦除只会使正在擦除的元素的迭代器失效。关于std::list
在性能上获胜的唯一时间是复制和分配非常昂贵,在这种情况下,修改包含的类通常是更好的选择,以降低复制和分配的成本,而不是切换到std::list
。