繁体   English   中英

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

[英]Is there any complexity difference between a std::vector used as a stack and a std::stack?

就像标题一样,用作堆栈的std :: vector和std :: stack之间是否存在时间或空间差异?

std::stack包装另一个容器。 如果堆栈的后备容器是std::vector ,那么不,没有区别。

但是,默认的后备容器是std::deque ,它可以具有不同的存储和计时行为

有关详细信息,请参阅std :: stack

不,复杂性没有区别。 std::vector是一个Container。 std::stack是容器的适配器。

默认情况下, std::stack使用std::deque作为它“适应”的容器。 但它实际上是一个类模板 ,允许您传入您希望它使用的基础容器的类型。


你可以同样使用std::vector作为底层容器:

template<typename T>
using MyVectorStack = std::stack<T, std::vector<T>>;


然而,

std::stack的情况下,使用std::deque vs std::vector作为底层容器之间的区别主要在于它的内存分配策略。

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

请参阅为什么std :: stack默认使用std :: deque?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM