[英]Is there a difference between std::stack::push() and std::stack::emplace() in this case?
[英]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块,则可以将内存返回到内存分配器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.