gpt4 book ai didi

c++ - 此代码在哪里取消引用无效的迭代器? (C++)

转载 作者:太空狗 更新时间:2023-10-29 20:01:27 24 4
gpt4 key购买 nike

我有一个循环

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++;
}
}
}

但是当 antiviral_data 包含一个项目时,我会得到一个错误“vector iterator not dereferencable”。为什么会出现此错误以及我在何处取消引用无效的迭代器?

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

最佳答案

vector 的大小是多少?

如果 viral_data 的元素多于 antiviral_data,那么,由于您以相同的速率递增 ai 和 vI,因此在 vI 循环结束之前 ai 会超出范围。

这里举一个简短的例子:

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

如果你检查 for 循环,你会注意到内部循环直到 j i 都为 10 时才会结束,但根据你的外部循环,我不应该 超过 5 个。

您需要像这样在外循环中递增 i(或者在您的情况下为 aI):

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

关于c++ - 此代码在哪里取消引用无效的迭代器? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/871579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com