c++ - 如何修复我的 C++ 代码?(不匹配运算符)
问题描述
如何修复我的 C++ 代码?(运算符不匹配)我收到一个错误:“运算符-”不匹配。可能是什么问题,我该如何解决?任何人都可以帮我解决它吗?
错误:'operator-' 不匹配(操作数类型是 'std::set::iterator' {aka 'std::_Rb_tree_const_iterator'} 和 'std::set::iterator' {aka 'std::_Rb_tree_const_iterator'} )|
#include <iostream>
#include <set>
using namespace std;
int main()
{
int O;
int N;
int M;
cin >> O >> N >> M;
int tanarsorszama[O];
int tantargysorszama[O];
int nap [O];
int ora [O];
for(int i=0; i<O; i++)
{
cin >> tanarsorszama[i] >> tantargysorszama[i] >> nap[i] >> ora[i];
}
int dblyukas[N]={0};
set<int>orai;
for(int i=0; i<N; i++)
{
for(int k=1; k<6; k++)
{
orai.clear();
for(int j=0; j<9; j++)
{
if(tanarsorszama[i]!=0 && ora!=0 && nap[k]!=0)
{
orai.insert(ora[j]);
}
}
if (orai.size() > 1)
{
dblyukas[i] += orai.end() - orai.begin() +1 - orai.size(); // There is the error
}
}
}
return 0;
}
解决方案
std::set
没有随机访问迭代器。这就是您收到错误的原因。
要访问集合的第一个和最后一个元素,请使用orai.begin()
和std::prev(orai.end())
。这些返回迭代器,必须用 operator* 取消引用。因此,纠正我认为您打算做的事情会导致以下结果:
if (orai.size() > 1)
{
dblyukas[i] += *std::prev(orai.end()) - *orai.begin() +1 - orai.size(); // There is the error
}
推荐阅读
- c# - 在 Unity 中管理与游戏时间相关的事件的最佳方式是什么?
- kubernetes - 为什么我们需要在 Kubernetes 中设置 Pod 副本?
- wordpress - post_type page redirect to random post
- angular - NgRx 效果 - 获取商店的值然后管道进入服务调用时的类型错误
- vim - 使用 vim 正则表达式在匹配字符串之前/之后添加/追加字符或字符串
- asp.net-mvc - I want to use Automapper in Business Layer of my ASP.NET MVC application
- gpu - Cuda driver error 700 in call at file 'geryon/nvd_timer.h' in LAMMPS
- azure-api-management - Azure Api management find user associated with ocp-apim-subscription-key subscription key
- python - Graphics behaving oddly with zelle graphics library for cellular automata
- .net-core - Autofac 不使用泛型类型解析服务