哪些更好的方法可以显示使用C STL创建的堆栈而不弹出每个元素的方法

what is a better approach to display stack created with C++ STL without popping every element

本文关键字:方法 堆栈 元素 创建 更好 显示 STL      更新时间:2023-10-16

我正在尝试使用 stl stack解决方案,我希望在其中显示堆栈元素。但是我没有发现没有弹出每个元素的任何有效的显示方法。

堆栈是容器适配器。它的唯一目的是将其他类型的容器(默认情况下为std::deque(和限制 将可见的接口与该容器的可见接口到允许堆栈的少数操作。除其他外,这意味着您可以观察到的堆栈中的唯一元素是顶部。

如果您需要观察其他要存储的元素,则不想使用堆栈。最明显的选择是直接使用std::deque(或std::vector(。当您需要类似堆栈的访问权限时,可以使用push_backbackpop_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';
}

尽管如此,如果您经常需要随机或序列访问堆栈的元素,则应使用一个允许随机或序列访问的容器: