【发布时间】:2012-11-25 08:40:04
【问题描述】:
我很好奇为什么std::vector 比std::deque 更受欢迎。双端队列在查找方面几乎同样有效,在插入方面效率更高(没有 vector::reserve)并允许在前面插入/删除。
Herb Sutter 曾经推荐过 if you want to use vector, just prefer deque(我在解释)。然而,在最近关于Writing Modern C++ 的一次谈话中,他再次强烈建议将std::vector 视为默认容器。根据我之前链接的GOTW,即使标准也有类似的措辞。
这种差异有原因吗?只是vector更简单,知名度更高,还是有技术原因?还是vector 只是一个更酷的名字..?
【问题讨论】:
-
只是我的看法,但总的来说我认为我们使用前端不如使用后端。
-
IIRC Scott Meyers 和 Bjarne 都推荐 vector 作为“默认容器”。另外,afaik,它是唯一一个底层内存模型与 C API 兼容的标准容器(所以我想这比双端队列要好?)
-
@JanDvorak:不,follow the white rabbit。
-
@JanDvorak:不知道,我不太关心 Java ;)
-
另外,
vector很容易适应 CPU 缓存,并且向量元素上的算术运算可以很容易地向量化。如果可能的话,使用deque做到这一点并不容易