std :: deque或std :: list

时间:2013-01-29 02:46:14

标签: c++ performance list deque

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

我知道这两个容器对于每个函数都提供O(1)复杂度,deque具有分摊的常量时间,而list具有恒定时间。

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

2 个答案:

答案 0 :(得分:7)

不确定如何回答您的问题。您似乎希望我们编写一个您可以轻松编写的基准程序。所以不要这样做,我只是陈述一下:

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

鉴于内存分配通常很慢,我希望deque能够超出执行列表。

如果您一次推送或弹出多个项目,这将特别正确,因为缓存位置发挥作用。

当然,您可以在列表上编写一个分配器来使用内存池。然后你可能会有更好的表现。

所以考虑到这些假设,离开并衡量它,如果你想讨论结果,那就是提问的时候了。

答案 1 :(得分:2)

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