[英]Getting error : vector iterator incompatible
我正在为管理酒店的班级制作一个程序。 我能够成功地将客户登记入房间。 但是当我试图从一个房间检出一个客户时,我得到一个运行时错误:矢量迭代器不兼容。 我运行调试器,并说问题是在我的while循环的条件语句中,但我无法弄清楚问题是什么(我认为我正确使用了调试器)。 我尝试用其他类似错误查看其他帖子,但我无法找到解决方案。 有人可以帮忙吗?
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);
}
}
}
执行erase
操作后, 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;
}
}
}
你不是在任何地方推进你的迭代器。
你需要在某些时候做++iter
,或者你的while循环将是无止境的。
另外不要忘记.erase
使迭代器无效,因此擦除后不能简单地前进。 Do iter = roomsCheckedInto.erase(iter);
在匹配id的情况下。
首先,你必须在某个地方增加它,或者你永远不会到达roomsCheckedInto的末尾 - 那就是你将有一个无限循环。
其次,擦除使其无效。
相反,用以下内容替换while循环:
while(iter != roomsCheckedInto.end())
{
if(*iter==rID) iter = roomsCheckedInto.erase(iter);
++iter;
}
还有,这是家庭作业吗? 如果是这样,标记为=)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.