C++ 获取错误:向量迭代器不兼容
我正在为管理一家酒店的班级制作一个节目。我能够成功地为客户办理入住手续。但是,当我试图从房间中签出客户时,会出现一个运行时错误:向量迭代器不兼容。我运行了调试器,并说问题出现在while循环的condition语句中,但我无法找出问题所在(我认为我正确使用了调试器)。我试着看其他有类似错误的帖子,但我没能找到解决办法。有人能帮忙吗C++ 获取错误:向量迭代器不兼容,c++,C++,我正在为管理一家酒店的班级制作一个节目。我能够成功地为客户办理入住手续。但是,当我试图从房间中签出客户时,会出现一个运行时错误:向量迭代器不兼容。我运行了调试器,并说问题出现在while循环的condition语句中,但我无法找出问题所在(我认为我正确使用了调试器)。我试着看其他有类似错误的帖子,但我没能找到解决办法。有人能帮忙吗 void Customer::removeRoomID(int rID) { vector<int>::iterator iter; it
void Customer::removeRoomID(int rID)
{
vector<int>::iterator iter;
iter = roomsCheckedInto.begin();
while(iter != roomsCheckedInto.end()) // <--DEBUGGER SAYS ERROR IN THIS LINE - ERROR: VECTOR ITERATOR INCOMPATIBLE
{
if(*iter==rID)
{
roomsCheckedInto.erase(iter);
}
}
}
void客户::删除oomid(int-rID)
{
向量:迭代器iter;
iter=roomsCheckedInto.begin();
而(iter!=roomsCheckedInto.end())/std::vector
迭代器在执行擦除操作后失效
尝试将代码更改为:
void Customer::removeRoomID(int rID)
{
vector<int>::iterator iter;
iter = roomsCheckedInto.begin();
while(iter != roomsCheckedInto.end())
{
if(*iter==rID)
{
// iter should now be set to the value
// returned from the erase() method.
iter = roomsCheckedInto.erase(iter);
}
else
{
++iter;
}
}
}
void客户::删除oomid(int-rID)
{
向量:迭代器iter;
iter=roomsCheckedInto.begin();
while(iter!=roomsCheckedInto.end())
{
if(*iter==rID)
{
//iter现在应设置为该值
//从erase()方法返回。
iter=roomsCheckedInto.erase(iter);
}
其他的
{
++iter;
}
}
}
首先,你必须在某个地方增加iter,否则你将永远无法到达roomsCheckedInto的末尾-也就是说,你将有一个无限循环
第二,擦除使iter失效
相反,将while循环替换为:
while(iter != roomsCheckedInto.end())
{
if(*iter==rID) iter = roomsCheckedInto.erase(iter);
++iter;
}
还有,这是家庭作业吗?如果是,标记为such=)您没有在任何地方推进迭代器
你需要在某个时候做++iter
,否则你的while循环将是无止境的
另外,不要忘记。erase
会使迭代器无效,因此不能在erase之后简单地前进。
如果id匹配,请执行iter=roomsCheckedInto.erase(iter);
。您的循环是错误的。您将iter从第二个减到最后,这将导致错误。谢谢!这解决了问题。我没有意识到++iter必须在else{}中运行。这是有意义的。我建议使用。