【发布时间】:2013-09-26 14:48:56
【问题描述】:
它们都具有 O(1) 的访问复杂度和 O(n) 的随机插入/删除复杂度。但是vector由于重新分配和复制而在扩展时成本更高,而deque则没有这个问题。
似乎deque性能更好,但为什么大多数人使用vector而不是deque?
【问题讨论】:
-
vector在访问项目时效率更高。两者的 O(1) 复杂度并不意味着两者都使用相同数量的周期。此外,如果可能,重新分配vector将移动其项目,而不一定要复制它们。 -
@syam 两者的访问复杂度都不是 O(1) 吗?
-
@texasbruce:是的;但是
deque通常有一个额外的间接级别,使访问速度变慢。 O(1) 只是意味着它不会随着容器变大而变得更糟。两者都已摊销了 O(1) 时间以将元素添加到末尾;但是您认为向量(有时)较慢的观点仍然成立。 -
@texasbruce 一个特定的操作可以有 O(1) 复杂度,需要 1000 个周期来执行,O(1) 复杂度但只需要 10 个周期。
-
值得一提的是,MSVC 的双端队列实现很容易有效地退化为一个指针向量(如果
sizeof(T) > 16),它就像一个向量,但具有额外的间接和分配。