0

ペアのベクトルを検索したいのですが、そうするために..私は次のことをしています:

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

しかし、私の問題は...これを行うと...私は無限ループで立ち往生しています...誰かが問題を解決するのを手伝ってくれますか

4

2 に答える 2

0

コードパッドでコードをテストしました。こちらでチェック!そして、それはうまく機能しています。jデバッグ中に変数の値を確認してください。SingerOftheFallが言ったように、どこかでデクリメントまたはリセットされている可能性があります。ループ内に値を増やす要素を追加している場合は、無限ループに陥ることもあります。その場合vec_pairs.size()、条件j != vec_pairs.size()は真になりません。指定したコードに問題は見つかりません。

于 2012-07-10T06:31:49.457 に答える
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で)、j6に減少し、次にcontinueループにjなり、7に戻り、if再び内部に入るというように、内部でスタックします。

于 2012-07-10T06:17:01.413 に答える