C++打破了矢量循环

Zio*_*ioN 1 c++ vector

我在类中有一个方法LinkRepository,我正在检查向量数组中的重复条目Datalinks,它是类的成员.我遍历数组中的所有元素以检入Datalink* datalink数组中已存在的新条目.如果是,那么不要添加,只需退出循环.

void LinkRepository::SaveLink(Datalink* datalink) {
bool Exist = false;

for(vector<Datalink*>::iterator dl = Datalinks.begin(); dl != Datalinks.end(); ++dl)
{
     if((strstr((*dl)->ParentID, datalink->ParentID) != NULL) && (strstr((*dl)->ChildID,datalink->ChildID) != NULL))
     {
          Exist = true;

          dl = Datalinks.end();
     }
}

    if(!Exist)
    {
        Datalinks.push_back(datalink);
    }
};
Run Code Online (Sandbox Code Playgroud)

我的程序似乎在语句的下一个循环中崩溃 dl = Datalinks.end();

我不知道它为什么会崩溃?

And*_*rew 8

更换

dl = Datalinks.end();
Run Code Online (Sandbox Code Playgroud)

附:

break;
Run Code Online (Sandbox Code Playgroud)

退出循环

这是一个简单的例子来说明您的解决方案无法工作的原因:

int i = 0;
for (; i != 10; ++i)
{
    i = 10;
}
Run Code Online (Sandbox Code Playgroud)

此循环将永远不会结束,因为在比较之前我将增加到11 i != 10

  • 您也可以将dl = Datalinks.end();更改为dl = Datalinks.rbegin();。这样会将dl设置为end之前的一个,因此增量将使其等于end。另一种方法是将测试从dl!= Datalinks.end()更改为dl&gt; = Datalinks.end()。有很多方法可以修复它,但是“ break”可能是最好的方法。 (2认同)