我仅使用push_front()
和push_back()
。因此,我不会因使用insert()
或remove()
而产生任何其他费用。
我知道这两个容器对于每个函数都提供O(1)
复杂度,deque
具有分摊的常量时间,而list
具有恒定时间。
但我想知道哪个时间比另一个少,如果有的话。
答案 0 :(得分:7)
不确定如何回答您的问题。您似乎希望我们编写一个您可以轻松编写的基准程序。所以不要这样做,我只是陈述一下:
list
,您推送的每个项目都会产生内存分配。deque
,一次分配大块。鉴于内存分配通常很慢,我希望deque
能够超出执行列表。
如果您一次推送或弹出多个项目,这将特别正确,因为缓存位置发挥作用。
当然,您可以在列表上编写一个分配器来使用内存池。然后你可能会有更好的表现。
所以考虑到这些假设,离开并衡量它,如果你想讨论结果,那就是提问的时候了。
答案 1 :(得分:2)
每当涉及到性能时,“猜测”(或者在互联网上询问,这比猜测稍微好一些,但只是稍微好一点)是一个坏主意,并且总是最好测量两个选项 - 在这种情况下,只是做一个循环,push_back或push_front足够的东西使它变得现实[你可能想让它更现实并运行你的代码所做的大部分工作,并在一个循环中做足够的时间以使其足够长时间来测量时间 - 它通常比向list
/ deque
添加数百万的值更加现实主义,然后发现“当你必须换掉它时,它变得非常慢!”]。