哪些更好的方法可以显示使用C STL创建的堆栈而不弹出每个元素的方法
what is a better approach to display stack created with C++ STL without popping every element
我正在尝试使用 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';
}
尽管如此,如果您经常需要随机或序列访问堆栈的元素,则应使用一个允许随机或序列访问的容器:
相关文章:
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 有没有一种方法可以捕获进程中的堆栈溢出?C++Linux
- 并发安全堆栈接口方法:正确与否?
- 如何使用方法覆盖在输出屏幕上显示堆栈整数值
- 有什么方法可以检测我的类的对象是否在堆栈上创建
- 在给定程序中降低矢量数组实现堆栈的时间复杂度有哪些不同的可能方法?
- C++ 堆栈推送方法不会将结构推送到堆栈上,只是返回 0
- 将参数推送到调用堆栈 (C++) 的可移植方法
- 哪些更好的方法可以显示使用C STL创建的堆栈而不弹出每个元素的方法
- 在堆栈上创建对象的不同方法
- 我的堆栈中的弹出方法有什么问题?
- 是否有一种便携式/标准的方法可以在堆栈跟踪中获取文件名和亚麻布
- 在使用喜欢的列表中,在堆栈中实现适当的(受底流的)POP/PEEK方法的麻烦
- 解决错误的一般方法:变量周围的堆栈'x'已损坏
- 调试堆栈价值腐败的好方法
- C++如果我有一个对象指针,是在堆栈或堆上分配的方法变量
- C++堆栈实现 - 两个版本的 top 方法
- 有什么方法可以将我从getcontext()中获得的上下文堆栈分开
- C++:在堆栈中实例化类的正确方法是什么
- 从方法堆栈编译中按值返回实例