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

时间:2017-04-28 10:43:03

标签: c++ std

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

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

默认情况下,std::stack使用std::deque作为容器,并且#34;适应"。但它实际上是一个 class-template ,它允许您传入您希望它使用的底层容器的类型。

您可以同样使用std::vector作为基础容器:

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

<强>然而,

对于std::stack,使用std::dequestd::vector作为基础容器之间的区别主要在于其内存分配策略。

std::vector弹出时,除非向量为空,否则内存将无法返回内存分配器。当从std::deque弹出时,如果&#34;弹出&#34;则可以将内存返回到内存分配器。释放了一个deque块。

请参阅Why does std::stack use std::deque by default?