Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::stack和std::queue缓存友好吗?_C++ - Fatal编程技术网

C++ 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::stack
std::queue
是容器适配器,它们基于底层上下文,例如
std::vector
,在这种情况下,它们将如您所说“缓存友好”或
std::list
,在这种情况下,它们不会是“缓存友好”的

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


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

<代码> STD::堆栈和 STD::队列< /COD>是容器适配器,一个奇怪的野兽,它在编译时确定的容器上提供了一个剥离的统一接口。 默认情况下,它们使用
std::deque
作为后备存储,这并不是缓存友好的(在我所研究的每个实现中)

堆栈
可以很容易地交给
向量
,这使得它对缓存很友好

队列
使用
向量
是一件棘手的事情。你要么把
向量
包装成一个循环缓冲区,要么把它变成一个双端向量。这两个都是非常重要的


std中唯一对缓存友好的自适应大小容器是vector(及其接近克隆的字符串),所以就这样了。

std::array
是一个容器。
std::string
主要是一个容器;)