就像标题一样,用作堆栈的std :: vector和std :: stack之间是否存在时间或空间差异?
答案 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::deque
与std::vector
作为基础容器之间的区别主要在于其内存分配策略。
从std::vector
弹出时,除非向量为空,否则内存将无法返回内存分配器。当从std::deque
弹出时,如果&#34;弹出&#34;则可以将内存返回到内存分配器。释放了一个deque块。