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

C++使用STL stack求和时for循环以s.size()为判断条件结果异常问题

问题原因分析

你写的for (int i = 0; i < s.size(); i++)逻辑的问题在于循环判断条件里的s.size()是动态变化的,每次循环执行s.pop()操作后,栈的大小都会减1,而循环变量i每次会加1,两者相向变化会导致循环提前终止,无法遍历栈中所有元素。

测试用例执行过程拆解

你输入5 5 4 3 2 1后,栈内最终会存入5个元素(从栈底到栈顶依次是5、4、3、2、1),初始s.size()为5,for循环实际执行过程如下:

  • 第1次循环:i=0,s.size()=5,条件成立。累加栈顶值1,answer=1,执行pop后s.size()变为4,i自增为1
  • 第2次循环:i=1,s.size()=4,条件成立。累加栈顶值2,answer=3,执行pop后s.size()变为3,i自增为2
  • 第3次循环:i=2,s.size()=3,条件成立。累加栈顶值3,answer=6,执行pop后s.size()变为2,i自增为3
  • 第4次判断:i=3,s.size()=2,3<2不成立,循环终止

最终只累加了3个元素,得到结果6,和你的实际输出一致。

正确写法说明

  • 你换成while(!s.empty())是完全正确的:该判断只关注栈是否为空,只要栈内还有元素就继续执行,直到所有元素都被弹出累加,自然能得到正确结果。
  • 如果你想继续用for循环实现,可以先把栈的初始大小存为固定值,避免动态变化影响判断:
int len = s.size();
for (int i = 0; i < len; i++)
{
    answer += s.top();
    s.pop();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:57:03