为什么C++遍历stack输出的元素数量仅为预期的一半?
错误原因分析
你的代码问题出在for循环的终止判断逻辑:每次循环迭代时都会动态获取当前栈的大小做比较,同时i在自增、栈的大小因为pop()操作在递减,两个变量相向变化导致循环提前终止。
我们可以逐次拆解循环的执行过程:
- 初始状态:栈内共6个元素,
i=0,0 < 6条件成立,执行输出+pop(),栈大小变为5,i自增为1 - 第2次迭代:
1 < 5条件成立,执行输出+pop(),栈大小变为4,i自增为2 - 第3次迭代:
2 < 4条件成立,执行输出+pop(),栈大小变为3,i自增为3 - 第4次迭代:
3 < 3条件不成立,循环直接退出
最终只执行了3次输出操作,所以得到结果111。
正确实现方案
两种常用的遍历栈全部元素的写法:
- 用
while循环判空,无需额外计数变量
while (!myS.empty()) { cout << myS.top(); myS.pop(); }
- 提前缓存栈的初始大小,循环判断使用固定的初始值,避免动态变化的size影响终止条件
int initSize = myS.size(); for (int i = 0; i < initSize; i++) { cout << myS.top(); myS.pop(); }
内容的提问来源于stack exchange,提问作者Ruihan Chen
相关产品推荐
相关产品推荐

