就像标题问的那样
a std::stack
包裹另一个容器。如果您的堆栈的衬板容器是std::vector
,则没有区别。
但是,默认的备份容器是一个std::deque
,它可以具有不同的存储和计时行为
有关详细信息,请参见std :: stack
不,复杂性没有差异。std::vector
是一个容器。std::stack
是容器的适配器。
默认情况下,std::stack
使用std::deque
作为"适应"的容器。但是它实际上是一个 class-template ,它允许您通过要使用的基础容器的类型。
您可以平均使用std::vector
作为基础容器:
template<typename T>
using MyVectorStack = std::stack<T, std::vector<T>>;
但是,
在std::stack
的情况下,使用std::deque
与std::vector
作为基础容器之间的差异主要是其内存分配策略。
从std::vector
弹出时,除非向量为空,否则不会将内存返回内存分配器。当从std::deque
弹出时,如果" pop"释放出Deque块,则可以将内存返回到内存分配器。
查看为什么std :: stack默认使用std :: Deque?