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循环,你会注意到内部循环直到j和i都是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开始。谢谢