You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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。

正确实现方案

两种常用的遍历栈全部元素的写法:

  1. 用while循环判空,无需额外计数变量
while (!myS.empty()) {
    cout << myS.top();
    myS.pop();
}
  1. 提前缓存栈的初始大小,循环判断使用固定的初始值,避免动态变化的size影响终止条件
int initSize = myS.size();
for (int i = 0; i < initSize; i++) {
    cout << myS.top();
    myS.pop();
}

内容的提问来源于stack exchange,提问作者Ruihan Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:45:01