std :: stack和std :: queue是否将它们的数据分配到连续的内存中,因此它们被认为是“缓存友好的”?
答案 0 :(得分:2)
std::stack
和std::queue
是容器适配器,是一个奇怪的野兽,它在编译时确定的容器上提供一个精简的统一接口。
默认情况下,他们使用std::deque
作为后备存储,这不是所有缓存友好的(在我检查的每个实现中)。
stack
可轻松传递vector
,这使其对缓存友好。
让queue
使用vector
非常棘手。您必须将vector
包装到循环缓冲区中,或使其成为双端向量。这些都是非平凡的。
std中唯一一个缓存友好的自适应大小容器是vector(及其近克隆字符串),所以你可以去。
答案 1 :(得分:1)
std::stack
和std::queue
是容器适配器,它们基于底层的上传者,例如std::vector
,在这种情况下,它们就像你说的“缓存友好” “或std::list
,在这种情况下,它们不会”缓存友好“。
默认情况下,两个容器适配器都使用std::deque
作为底层容器,因为它具有模拟适配器的所有必要方法。
例如,std::vector
没有必需的方法pop_front
,也不能用作std::queue
的底层容器。
您可以定义自己的底层容器。这些要求在C ++标准中描述。