根据Stroustrup的矢量vs列表

时间:2012-11-01 09:39:50

标签: c++ list stl vector

  

可能重复:
  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?

vector vs. list in STL

现在根据Stroustrup我错了。

当然,我可以编写几个测试并尝试弄清楚在每种特定情况下使用什么,但是有理论方法吗?

1 个答案:

答案 0 :(得分:17)

首选std::list优于std::vector的最重要动机是迭代器的有效性,性能。如果在插入或擦除时,您有其他迭代器进入容器,那么您可能需要std::list,因为它的插入不会使任何迭代器无效,并且擦除只会使正在擦除的元素的迭代器失效。关于std::list在性能上获胜的唯一时间是复制和分配非常昂贵,在这种情况下,修改包含的类通常是更好的选择,以降低复制和分配的成本,而不是切换到std::list