C++ 函数打印堆栈的所有元素?
我想打印字符堆栈的所有元素。这是我的职责:C++ 函数打印堆栈的所有元素?,c++,stack,C++,Stack,我想打印字符堆栈的所有元素。这是我的职责: void print_stack(stack<char> c) { stack<char> a = c; for (unsigned int i = 0; i < a.size(); i++) { std::cout<<a.top(); a.pop(); } } 目前,它只打印第一个a.size-1元素,而不是最后一个元素。我很难弄清楚为什
void print_stack(stack<char> c)
{
stack<char> a = c;
for (unsigned int i = 0; i < a.size(); i++) {
std::cout<<a.top();
a.pop();
}
}
目前,它只打印第一个a.size-1元素,而不是最后一个元素。我很难弄清楚为什么会这样。 < p>你的循环是错误的,考虑一下当你做A.如果A.Sead是3,现在是2,那么你的循环会发生什么,那么你的循环将迭代一个更少的时间。您应该这样做:
for (unsigned int i = 0; i < c.size(); i++)
while (!a.empty()) {
std::cout<<a.top();
a.pop();
}
您也可以简单地
std::stack<int> c;
std::cout << c; //[a, b, c]
虽然您不能格式化它,但您可以得到它的表示。我不知道,您试过了吗?是的,在我的程序中,它工作不正常。我想知道是否有人有更好的方法/一种通常使用的方法。循环是错误的,你应该迭代直到a为空,这就是它。Thanks@ArifBurhanstd::stack::pop只返回void,因此,如果我想创建一个清除堆栈中所有元素的函数,并希望它注册到全局堆栈c,我会使用void clear_stackstack&c?@NickPredey,诸如此类。回顾4年前,看看我从这个问题上取得了什么进展,这很有趣。谢谢你的回答!:正是我需要的,谢谢。对于我的noobs同伴的一些解释:当循环继续无限运行直到一个特定的条件正确时?所以我们要做的是打印出堆栈顶部的内容,然后弹出或删除元素并重新迭代。一旦堆栈现在为空,这种情况就会继续发生,因为我们不断弹出。一旦它空了,它就停止了。完成。
void print_stack(stack<char> c) {
while (!c.empty()) {
std::cout<<c.top();
c.pop();
}
}
std::stack<int> c;
std::cout << c; //[a, b, c]