gpt4 book ai didi

c++ - Vector 比 size() 迭代次数更多

转载 作者:太空狗 更新时间:2023-10-29 23:36:16 24 4
gpt4 key购买 nike

我有这段代码:

for (std::vector<Marker>::iterator it = markers.begin(); it != markers.end(); ++it) {
if (it->getDots().size() < 3) {
markers.erase(it);
}
}

在其中一个测试输入(应用程序进行图像分析)中,我遇到了段错误。我试图调试代码(无济于事)并注意到一件事。当要求 gdb p markers.size() 我收到 $9 = 3。所以我希望循环迭代 3 次,但令人惊讶的是它(至少)重复了 5 次。在第五次迭代中出现段错误。我还注意到,导致错误的不是 *it(这里是 it->)的取消引用。它特别是 it->getDots(),这是一个简单的 getter。

我很少用 C++ 编写,所以这可能是一些简单的错误,但我的调试和谷歌搜索都没有带来任何解决方案。你能帮忙吗?

我想强调的是,在各种不同的输入(略有不同的图像)上,此功能都能正常工作,因此我更难追踪错误。

最佳答案

vector::erase 使指向被删除元素的所有迭代器以及后面的所有元素无效。因此 it 变得无效,并且 ++it 表达式在下一个循环迭代中表现出未定义的行为。

编写此逻辑的最佳方法是使用 erase-remove idiom .

关于c++ - Vector 比 size() 迭代次数更多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18165026/

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