我正在尝试使用 stl stack解决方案,我希望在其中显示堆栈元素。但是我没有发现没有弹出每个元素的任何有效的显示方法。
堆栈是容器适配器。它的唯一目的是将其他类型的容器(默认情况下为std::deque
(和限制 将可见的接口与该容器的可见接口到允许堆栈的少数操作。除其他外,这意味着您可以观察到的堆栈中的唯一元素是顶部。
如果您需要观察其他要存储的元素,则不想使用堆栈。最明显的选择是直接使用std::deque
(或std::vector
(。当您需要类似堆栈的访问权限时,可以使用push_back
,back
和pop_back
获取它。当您需要访问内部元素时,可以使用begin()
,end()
,operator[]
,at()
等。
stack
是一个容器适配器,您无法以便携式方式访问下面的容器。
如果您确实需要通过堆栈进行迭代,那么堆栈可能对您来说是一个不好的选择,您需要找到一个适合您需求的容器,
如果您不想打破堆栈合同,但想打印出内容以进行测试,则可以将堆栈复制到另一个,抛出的堆栈中:
#include <stack>
#include <vector>
#include <iostream>
int main() {
std::stack<int> foo;
foo.push(1);
foo.push(2);
foo.push(3);
std::stack<int> bar { foo };
while(bar.size()) {
std::cout << " - " << bar.top() << 'n';
bar.pop();
}
std::cout << "foo-size: " << foo.size() << 'n';
std::cout << "bar-size: " << bar.size() << 'n';
}
尽管如此,如果您经常需要随机或序列访问堆栈的元素,则应使用一个允许随机或序列访问的容器: