c++ - Vector 与 List 的真实世界示例显示了每个比另一个更有效的场景

标签 c++ visual-c++ c++11

我实际上是在一次求职面试中被问到这个问题的,我愣住了。这个问题让我深思,所以我想我也会问问你们中是否有人可以帮忙举个例子。您能否在现实世界的示例中重点关注效率,以说明一个比另一个更高效,反之亦然?

非常感谢

编辑:

感谢大家的意见。澄清一下,我要求的是真实世界的例子,不要担心它们是否是微不足道的例子,任何一个都可以。

最佳答案

第一次听前应避免的正常感知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 直到你有理由不使用。

更多信息:

了解更多信息的视频:Why you should avoid Linked Lists

关于c++ - Vector 与 List 的真实世界示例显示了每个比另一个更有效的场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26111115/

相关文章:

c++ - 成员 "extra qualification ‘student::’ [-fpermissive] 上的错误 ‘student’ “

c++ - 为什么我的模板不接受初始化列表

c++ - 无法在 std::map<std::string,std::shared_ptr<class>> 中设置值

C++ 自定义断言

c++ - 如何返回包含字符串/整数变量的字符串

C++线程线程的最大CPU

c++ - WSARecv 的 dsBytes、dwFlags 参数

c++ - Chapter1.exe : 0xC0000005: Access violation writing location 0x0038EE7C 中 0x003860EF 处的未处理异常

c++ - '? ?' is getting converted into ' ^' 在 Visual C++ 中。为什么会发生,出路在哪里?

c++ - 在 C++ 标准的哪些版本中, "(i+=10)+=10"具有未定义的行为?