繁体   English   中英

获取错误:矢量迭代器不兼容

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM