我想打印字符堆栈的所有元素。这是我的函数:
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
元素,而不打印最后一个元素。我很难弄清楚为什么会这样。
你的循环是错误的,考虑一下当你做a.pop()
时a
会发生什么 如果a.size()
是 3,现在是 2,所以你的循环将少迭代一次。您应该这样做:
while (!a.empty()) {
std::cout<<a.top();
a.pop();
}
此外,您不需要复制c
,因为无论如何您正在为此函数的范围创建c
的副本void print_stack(stack<char> &c)
您的函数符号void print_stack(stack<char> c)
。这意味着这就足够了:
void print_stack(stack<char> c) {
while (!c.empty()) {
std::cout<<c.top();
c.pop();
}
}
这是一个活生生的例子。
for (unsigned int i = 0; i < c.size(); i++)
或
while(a.size() > 0)
你也可以简单地做
std::stack<int> c;
std::cout << c; //[a, b, c]
虽然您无法格式化它,但您将能够获得它的表示形式。