我想打印字符堆栈的所有元素。这是我的功能:
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
元素而不是最后一个元素。我无法弄清楚为什么会这样。
答案 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();
}
}
答案 1 :(得分:2)
for (unsigned int i = 0; i < c.size(); i++)
或
while(a.size() > 0)
答案 2 :(得分:0)
您也可以简单地进行
pip
尽管您无法格式化它,但仍可以获取它的表示形式。