【问题标题】:What do I do wrong that causes an infinite loop我做错了什么导致无限循环
【发布时间】:2014-02-06 23:10:06
【问题描述】:

所以我使用了一个向量列表,而我的代码似乎破坏了它,因此 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?

【问题讨论】:

  • 哈哈。好点子。标记为 for 循环,但代码中的任何地方都没有一个 for...
  • Does anyone have an idea what I do so horribly wrong :D? 你忘记了循环。
  • 你的static_cast&lt;float&gt; 臭得要命。当你做错事时关闭编译器很可能会让你在一台不合作的计算机前摸索几个小时。帮自己一个忙,移除演员表,然后尝试理解并纠正问题。
  • 你说你有一个无限循环;而且第二个代码 sn-p “导致迭代器中断”。你到底是什么意思?
  • 现在使用 for 循环 :D。我的坏....

标签: c++ for-loop iterator infinite-loop


【解决方案1】:

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

另见What is iterator invalidation?

【讨论】:

  • 好的,谢谢你给我看。那么你是说如果我列表中的一个向量被重新定位,那么所有的点都会变得无效?甚至是列表迭代器?!
  • 另请注意,在第一个 sn-p 中我没有出现此错误,即使我将数据推送到我的向量中。这就是奇怪的部分......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
相关资源
最近更新 更多