gpt4 book ai didi

c++ - 我做错了什么导致无限循环

转载 作者:行者123 更新时间:2023-11-28 07:09:53 24 4
gpt4 key购买 nike

所以我使用了一个 vector 列表,我的代码似乎破坏了它,因此 for 循环不会退出。

下面是有效的代码:

for(possible_planes_it = possible_planes.begin(); possible_planes_it != possible_planes_end; possible_planes_it++)
{
if(static_cast<float>(good_matches.size()) >= static_cast<float>((matches.size())*0.8))
{
possible_planes_it->push_back(Plane(area, *center_it, keypoint, descriptor, count));
}
else
{
list.push_back(vector<Plane>());
list.back().push_back(Plane(area, *center_it, keypoint, descriptor, count));
}
}

这会导致迭代器中断:

for(possible_planes_it = possible_planes.begin(); possible_planes_it != possible_planes_end; possible_planes_it++)
{
if(static_cast<float>(good_matches.size()) >= static_cast<float>((matches.size())*0.8))
{
if(possible_planes_it->back().getTimestamp() < count) // Means that there has not been a match found this round
{
possible_planes_it->push_back(Plane(area, *center_it, keypoint, descriptor, count));
possible_planes_it->back().setNumberOfGoodMatches(good_matches.size());
}
else
{
if(possible_planes_it->back().getNumberOfGoodMatches() < good_matches.size())
{
possible_planes_it->pop_back(); // If a better match has been found, remove the last vector entry and push the new one
possible_planes_it->push_back(Plane(area, *center_it, keypoint, descriptor, count));
possible_planes_it->back().setNumberOfGoodMatches(good_matches.size());
}
else
{
list.push_back(vector<Plane>());
list.back().push_back(Plane(area, *center_it, keypoint, descriptor, count));
}
}
}
else
{
list.push_back(vector<Plane>());
list.back().push_back(Plane(area, *center_it, keypoint, descriptor, count));
}
}

有谁知道我做错了什么 :D?

最佳答案

查看 vector 的 pop_backpush_back页面,特别是查看迭代器有效性并注意如果发生重定位,您的迭代器将如何失效。

另见 What is iterator invalidation?

关于c++ - 我做错了什么导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21188980/

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