std :: stack和std :: queue cache是​​否友好?

时间:2015-12-10 20:58:14

标签: c++

std :: stack和std :: queue是否将它们的数据分配到连续的内存中,因此它们被认为是“缓存友好的”?

2 个答案:

答案 0 :(得分:2)

std::stackstd::queue是容器适配器,是一个奇怪的野兽,它在编译时确定的容器上提供一个精简的统一接口。

默认情况下,他们使用std::deque作为后备存储,这不是所有缓存友好的(在我检查的每个实现中)。

stack可轻松传递vector,这使其对缓存友好。

queue使用vector非常棘手。您必须将vector包装到循环缓冲区中,或使其成为双端向量。这些都是非平凡的。

std中唯一一个缓存友好的自适应大小容器是vector(及其近克隆字符串),所以你可以去。

答案 1 :(得分:1)

std::stackstd::queue是容器适配器,它们基于底层的上传者,例如std::vector,在这种情况下,它们就像你说的“缓存友好” “或std::list,在这种情况下,它们不会”缓存友好“。

默认情况下,两个容器适配器都使用std::deque作为底层容器,因为它具有模拟适配器的所有必要方法。 例如,std::vector没有必需的方法pop_front,也不能用作std::queue的底层容器。

您可以定义自己的底层容器。这些要求在C ++标准中描述。