迭代向量时陷入无限循环的问题

Issues of getting stuck into infinite loop while iterating through vectors

本文关键字:无限循环 问题 向量 迭代      更新时间:2023-10-16

我想搜索一个成对的向量,为了做到这一点,我正在做以下操作:

 vector<pair<double ,double> > vec_pairs;
 for(vector<unsigned int>::size_type j = 0; j != vec_pairs.size(); j++ )
        {
            if(vec_pairs[j].first==12.6)
            {
              int z=7;
              continue;
            }
        }

然而,我的问题是…在这样做的时候。。。我陷入了一个无限循环。。。有人能帮我解决这个问题吗?

首先,您发布的代码"照原样"运行良好。

这种类型的代码进入无限循环的唯一原因是在循环中修改j

如果您在循环中增加j,您可能不会陷入困境,因为您将失去绑定,并可能导致代码崩溃。

for(vector<unsigned int>::size_type j = 0; j != vec_pairs.size(); j++ )
    {
        if(vec_pairs[j].first==12.6)
        {
            j++;//You will go out of vector bonds and might get an error here.
            continue;
        }
    }

然而,如果你这样做:

for(vector<unsigned int>::size_type j = 0; j != vec_pairs.size(); j++ )
    {
        if(vec_pairs[j].first==12.6)
        {
            j--;//j is decreased each time you get in here, so you will be stuck on one element,
            continue;
        }
    }

然后你会被困在里面,因为当你进入if语句(比如说,在元素7上)时,j将减少到6,然后你将continue循环,j将增加回7,你将再次进入if,依此类推

我已经在codepad中测试了您的代码。在这里查看!它运行良好。调试时请检查变量j的值。正如足球歌手所说,它可能在某个地方被减少或重置。如果你在循环中添加元素,增加vec_pairs.size()的值,并且条件j != vec_pairs.size()在这种情况下永远不会成立,那么它也可以进行无限循环。在你给出的代码中找不到任何错误。