std :: vector用作堆栈和std :: stack之间是否存在任何复杂性差异



就像标题问的那样

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::dequestd::vector作为基础容器之间的差异主要是其内存分配策略。

std::vector弹出时,除非向量为空,否则不会将内存返回内存分配器。当从std::deque弹出时,如果" pop"释放出Deque块,则可以将内存返回到内存分配器。

查看为什么std :: stack默认使用std :: Deque?

最新更新