C++ 这段代码在哪里取消对无效迭代器的引用?(C+;+;)

C++ 这段代码在哪里取消对无效迭代器的引用?(C+;+;),c++,vector,iterator,C++,Vector,Iterator,我有一个循环 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.

我有一个循环

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++;
        }
    }
}
但是当抗病毒药物数据包含一个项目时,我会得到一个错误“vector iterator not Dereferenceable”。为什么我会得到这个错误,我在哪里去引用一个无效的迭代器


注意:到目前为止,只有当if()语句为false时才会发生错误。如果if()语句为真,我不知道会发生什么。

向量的大小是多少

如果病毒_数据比抗病毒_数据包含更多元素,那么,由于aI和vI以相同的速度递增,aI将在vI循环结束之前超出界限

举一个简单的例子:

for(int i = 0; i < 5;)
{
    for(int j = 0; j < 10;)
    {
        i++;
        j++;
    }
}
for(int i=0;i<5;)
{
对于(int j=0;j<10;)
{
i++;
j++;
}
}
如果你检查for循环,你会注意到内部循环直到ji都是10才会结束,但是根据你的外部循环,i不应该超过5

您将希望在外部循环中增加i(或者在您的情况下,增加aI),如下所示:

for(int i = 0; i < 5;)
{
    for(int j = 0; j < 10;)
    {
        j++;
    }
    i++;
}
for(int i=0;i<5;)
{
对于(int j=0;j<10;)
{
j++;
}
i++;
}

取消引用发生在

((*aI)->x == (*vI)->x && (*aI)->y == (*vI)->y)

当该语句对
Antivirial_数据
列表中的最后一个元素为真时,就会发生这种情况。在这种情况下,在内部for循环的下一次迭代中,您将取消引用
抗病毒药物数据.end()
,这是不允许的。

vI始终为2,aI从0开始。谢谢