Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 函数打印堆栈的所有元素?_C++_Stack - Fatal编程技术网

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]