打印堆栈的所有元素的功能?

时间:2016-03-02 19:31:16

标签: 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元素而不是最后一个元素。我无法弄清楚为什么会这样。

3 个答案:

答案 0 :(得分:4)

你的循环是错误的,考虑a如果a.pop()为3,a.size()会发生什么,现在是2,所以你的循环会迭代一次。你应该这样做:

while (!a.empty()) {
      std::cout<<a.top();
      a.pop();
 }

此外,您无需复制c,因为您的功能签名为void print_stack(stack<char> c)而非void print_stack(stack<char> &c)您无论如何都要为此功能的范围创建c的副本。这意味着这就足够了:

void print_stack(stack<char> c) {
    while (!c.empty()) {
        std::cout<<c.top();
        c.pop();
    }
}

Here is a live example.

答案 1 :(得分:2)

for (unsigned int i = 0; i < c.size(); i++)

while(a.size() > 0)

答案 2 :(得分:0)

您也可以简单地进行

pip

尽管您无法格式化它,但仍可以获取它的表示形式。