C++ std::stack和std::queue缓存友好吗?
std::stack和std::queue是否在连续内存中分配数据,因此它们被认为是“缓存友好的”?C++ std::stack和std::queue缓存友好吗?,c++,C++,std::stack和std::queue是否在连续内存中分配数据,因此它们被认为是“缓存友好的”?std::stack和std::queue是容器适配器,它们基于底层上下文,例如std::vector,在这种情况下,它们将如您所说“缓存友好”或std::list,在这种情况下,它们不会是“缓存友好”的 默认情况下,两个容器适配器都使用std::deque作为基线容器,因为它具有模拟适配器的所有必要方法。 例如,std::vector没有所需的方法pop_front,不能用作std::queue
std::stack
和std::queue
是容器适配器,它们基于底层上下文,例如std::vector
,在这种情况下,它们将如您所说“缓存友好”或std::list
,在这种情况下,它们不会是“缓存友好”的
默认情况下,两个容器适配器都使用std::deque
作为基线容器,因为它具有模拟适配器的所有必要方法。
例如,std::vector
没有所需的方法pop_front
,不能用作std::queue
的基线容器
可以定义自己的底层容器。要求在C++标准中描述。
<代码> STD::堆栈和std::deque
作为后备存储,这并不是缓存友好的(在我所研究的每个实现中)
堆栈
可以很容易地交给向量
,这使得它对缓存很友好
让队列
使用向量
是一件棘手的事情。你要么把向量
包装成一个循环缓冲区,要么把它变成一个双端向量。这两个都是非常重要的
std中唯一对缓存友好的自适应大小容器是vector(及其接近克隆的字符串),所以就这样了。
std::array
是一个容器。std::string
主要是一个容器;)