我有一个循环
for(aI = antiviral_data.begin(); aI != antiviral_data.end();)
{
for(vI = viral_data.begin(); vI != viral_data.end();)
{
if((*aI)->x == (*vI)->x && (*aI)->y == (*vI)->y)
{
vI = viral_data.erase(vI);
aI = antiviral_data.erase(aI);
}
else
{
vI++;
aI++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当antiviral_data包含一个项目时,我会收到错误"vector iterator not dereferencable".为什么我会发现此错误以及我在何处取消引用无效的迭代器?
注意:到目前为止,仅当if()语句为false时才会发生错误.我不知道如果if()语句为真,会发生什么.
矢量的大小是多少?
如果viral_data有更多的元素然后是antiviral_data,那么,因为你以相同的速率增加aI和vI,所以aI会在vI循环结束之前超出界限.
举一个简短的例子:
for(int i = 0; i < 5;)
{
for(int j = 0; j < 10;)
{
i++;
j++;
}
}
Run Code Online (Sandbox Code Playgroud)
如果你越过for循环,你会注意到内循环不会结束,直到j 和 i都是10,但根据你的外循环,我不应该超过5.
你会想要在外部循环中增加i(或者在你的情况下,aI),如下所示:
for(int i = 0; i < 5;)
{
for(int j = 0; j < 10;)
{
j++;
}
i++;
}
Run Code Online (Sandbox Code Playgroud)