我实际上是在一次求职面试中被问到这个问题的,我愣住了。这个问题让我深思,所以我想我也会问问你们中是否有人可以帮忙举个例子。您能否在现实世界的示例中重点关注效率,以说明一个比另一个更高效,反之亦然?
非常感谢
编辑:
感谢大家的意见。澄清一下,我要求的是真实世界的例子,不要担心它们是否是微不足道的例子,任何一个都可以。
最佳答案
第一次听前应避免的正常感知std::list
更喜欢std::vector
默认情况下,大学学习的主题始终适用于所学(Big-O)。两种容器方法的Big-O见引用。
那个std::list
(一个双链表),如果它在中间,插入、删除(O(1))的性能应该更高容器(性能显着提升的地方)。
这个语句的问题在于硬件喜欢连续内存,并且已经发明了很多功能来利用它(预取,缓存等......),编译器已经被优化以识别模式(例如: memcpy, memmove),并生成最佳性能代码(有时直接在汇编中)。
之前的考虑得出结论,即使容器大小很大(例如:50 万,我认为这是 Bjarne 测试的最大大小),std::vector
的性能优于 std::list
的性能(以及更多的内存大小)。
在新标准 (C++11) 中,由于移动语义使得在某些情况下 push_back
的增长成本更低,这种差异变得更大。
我的建议是始终使用 std::vector
直到你有理由不使用。
更多信息:
- http://isocpp.org/blog/2014/06/stroustrup-lists
- http://blog.davidecoppola.com/2014/05/20/cpp-benchmarks-vector-vs-list-vs-deque/
了解更多信息的视频:Why you should avoid Linked Lists
关于c++ - Vector 与 List 的真实世界示例显示了每个比另一个更有效的场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26111115/