反过来我的意思是交换元素的顺序,这样包含ABCD的堆栈就会以DCBA结束。我目前正在使用向量而不是堆栈,因为反向操作。
答案 0 :(得分:3)
std::stack<T>
通过包装底层容器来运行,通常是std::deque<T>
。
// According to cppreference.com
template<
class T,
class Container = std::deque<T>
> class stack;
没有理由使用std::stack
代替std::vector
或std::deque
,除非您关心的是最重要的元素。该结构甚至不会暴露迭代器,也是设计的一部分。
当然你可以编写一个奇特的功能来反转它(存储顶部,弹出,推送到一个新的堆栈,重复),但为什么要做比你更多的工作呢?
答案 1 :(得分:3)
堆栈是一个容器,它提供了一个漂亮的简单push / pop / top接口。您要求的实际上不是堆栈功能,因此意味着堆栈是满足您需求的错误容器。
最有可能vector
或deque
是一个不错的选择(正如您在问题中已经提到的那样),因为它们提供恒定的时间推/回弹功能,以及线性时间逆转(std::reverse
)。
答案 2 :(得分:3)
STL堆栈不是容器,它是容器适配器(http://www.cplusplus.com/reference/stack/stack/)。底层容器类型作为参数传递给模板,默认为deque。对你的问题的简短回答是'不' - 堆栈接口不提供这种能力。
我看到的两个选项是:
如上所述使用堆栈接口(纯堆栈解决方案)(为方便起见,此处重复链接): http://dev-faqs.blogspot.com/2012/02/reverse-given-stack-in-place.html
使用更灵活的结构(例如vector或deque)。在这种情况下,根据您是在“前进”还是“后退”模式下使用序列,从任何一端使用双端队列和推/弹都可能是最有意义的。这是最有效的。