【问题标题】:std::deque or std::list [closed]std::deque 或 std::list [关闭]
【发布时间】:2023-03-14 11:11:01
【问题描述】:

我只使用push_front()push_back()。因此,我不会因使用insert()remove() 而产生任何其他费用。

我知道这两个容器都为每个函数提供了 O(1) 复杂性,deques 具有摊销的恒定时间,而 lists 具有恒定时间。

但我想知道哪个时间比另一个少,如果有的话。

【问题讨论】:

标签: c++ performance list deque


【解决方案1】:

不知道如何回答您的问题。您似乎希望我们编写一个您自己可以轻松编写的基准程序。因此,我不这样做,而是声明:

  • 使用list,您推送的每个项目都会导致内存分配。
  • 使用deque,一次性分配大块。

鉴于内存分配通常很慢,我预计 deque 的性能会优于列表。

如果您一次推送或弹出多个项目,则尤其如此,因为缓存局部性开始发挥作用。

当然,您可以在列表上编写一个分配器来使用内存池。那么你可能会获得更好的性能。

因此,考虑到这些假设,离开并衡量它,如果您想讨论结果,那就是提出问题的时候了。

【讨论】:

  • 就是这样,谢谢。列表动态分配内存。双端队列分配一个块。谢谢
【解决方案2】:

每当谈到性能时,“猜测”(或在互联网上询问,这比猜测稍微好一点,但只是在一定程度上)是一个坏主意,并且始终最好衡量这两个选项 - 在这种情况下,只需做一个循环,并 push_back 或 push_front 足够的东西使它变得现实[你可能想让它更现实并运行你的代码所做的大部分工作,并在循环中执行足够的次数以使其持续足够长以测量时间 -它通常比向list/deque 添加大量值然后发现“当你必须换出时,它变得非常慢!”更现实。

【讨论】:

    猜你喜欢
    • 2012-09-19
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 2013-07-27
    • 1970-01-01
    • 2012-03-07
    • 2021-02-24
    相关资源
    最近更新 更多