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

时间:2012-07-10 06:06:16

标签: c++

我想搜索成对的向量,以便这样做..我正在做以下事情:

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

然而我的问题是......在这样做......我陷入了无限循环...... 任何人都可以帮我解决问题

2 个答案:

答案 0 :(得分:0)

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

这种类型的代码进入无限循环的唯一原因是修改循环内的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,依此类推。

答案 1 :(得分:0)

我在codepad中测试了你的代码。检查一下here!它工作正常。调试时检查变量j的值。正如SingerOftheFall所说,它可能会在某处减少或重置。如果在循环内添加元素会增加vec_pairs.size()的值,并且条件j != vec_pairs.size()在这种情况下永远不会为真,那么它也可以进行无限循环。在您给出的代码中找不到任何错误。