std::deque or std::list

std::deque or std::list

本文关键字:std list deque or      更新时间:2023-10-16

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

我知道这两个容器都为这些功能中的每一个提供了O(1)复杂性,deque具有摊销恒定时间与list具有恒定时间相比。

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

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

  • 使用 list 时,您推送的每个项目都会产生内存分配。
  • 有了deque,大块被立即分配。

鉴于内存分配通常很慢,我预计deque会跑赢列表。

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

当然,您可以在列表中编写分配器以使用内存池。 然后,您可能会获得更好的性能。

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

每当涉及到性能时,"猜测"(或在互联网上询问,这比猜测略好,但只是有点好)是一个坏主意,并且总是最好衡量这两个选项 - 在这种情况下,只需做一个循环,push_back或push_front足够多的东西来使其现实[您可能希望使其更真实并运行代码的大部分功能, 并在循环中这样做,使其持续足够长的时间来测量时间 - 这通常比向list/deque添加大量值然后发现"当你必须换出时,它会变得非常慢!