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

如何修复C++代码中std::set迭代器报no match for operator-的错误

报错原因与修复方案

报错原因

std::set的迭代器属于双向迭代器,只有随机访问迭代器(比如std::vector、std::array的迭代器)才支持-运算符直接计算两个迭代器的距离,因此orai.end() - orai.begin()的写法不符合语法,触发运算符不匹配报错。

另外从业务逻辑来看,你写的迭代器差值即使语法成立,得到的结果也等于orai.size(),代入表达式后整行计算结果会恒等于1,显然不符合你的需求,你实际要算的应该是set中最大元素和最小元素的差值。

修复方案

替换报错行的代码即可,std::set默认按升序排列,最小元素为*orai.begin(),最大元素为*orai.rbegin(),正确写法如下:

dblyukas[i] += (*orai.rbegin() - *orai.begin() + 1) - orai.size();

其他隐藏问题提示

  • 你代码中if(tanarsorszama[i]!=0 && ora!=0 && nap[k]!=0)判断里的ora!=0是错误写法,ora是数组名,直接使用等于取数组首地址,永远为真,应该改为ora[j]!=0。
  • C++标准不支持变长数组(比如int tanarsorszama[O]这种用变量定义数组长度的写法),如果需要动态长度建议改用std::vector。
  • nap数组的长度为O,但你循环变量k的取值是1到5,需要保证O>5避免数组越界。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:06:01