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

C++ 二维vector在if语句内赋值后退出即重置问题求助

核心结论

你的代码从未执行过if分支内的赋值逻辑,不是赋值后被重置,问题根源是if判断条件永远无法被满足。

问题原因

  • 测试代码的初始化逻辑导致判断条件永假:你给所有行的j∈[9,14]位置都赋值为-1,当遍历到第一个满足P[i][j]==-1的位置j=9时,P[i-1][j](上一行同列位置)的值也是-1,不满足你要求的P[i-1][j]==0的判断条件,整个if分支永远不会执行,自然不会有赋值操作。
  • 原业务代码存在相同的逻辑问题:你用图像亮区(img.at<uchar>(i,j)>=220)对应P[i][j]=-1,如果亮区是纵向连通的,那么遍历到亮区位置时,上一行同列大概率也是-1,同样触发不了判断条件。

验证方法

你可以临时把if判断条件简化为仅判断P[i][j]==-1,运行后就能看到vector的值被正常修改,确认是判断条件的问题,而非二维vector的赋值逻辑有问题。

修正建议

如果你的需求是给所有连通的-1区域做标记,当前的左上判断逻辑本身不符合要求,你应该改用标准的连通域标记方法:

  1. 遍历所有P[i][j]==-1的位置
  2. 遇到未标记的-1位置时,bin自增,然后用BFS/DFS遍历整个连通区域,把区域内所有位置都赋值为当前bin值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:27:02