如何修复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
相关产品推荐
相关产品推荐

