-4

これがコードです

next = friendchain.begin()->first;
while(true) {
    start = next;
    next = friendchain[next];

    if(next!=0) {
        friendchain.erase(start);
        groupcount++;
        size = friendchain.size();
        printf("size=%i\n", size);
        //size = 0
    }

    if (next==0) {
        size = friendchain.size();
        printf("size=%i\n", size);
        //size = 1!!!

        if (friendchain.empty())
        {
            break;
            //should go out of the loop here
        } else {
            next = friendchain.begin()->first;
            // next has value of 3   
        }
    }
}

私のフレンドチェーン マップの内容は次のとおりです
。1 -> 2 および
2 -> 3
else の部分が実行される理由がわかりません。
さらにコードが必要な場合はお知らせください。
よろしく

4

1 に答える 1

1

不要な if ステートメントをいくつか削除したため、消去が正しく処理されませんでした。

auto itr = friendchain.begin();
while (itr != friendchain.end()) {
    if (itr->first != 0) {
        friendchain.erase(itr++);
        groupcount++;
    } else {
        ++itr;
    }

    std::size_t size = friendchain.size();
    printf("size=%i\n", size);
}
于 2013-03-05T17:25:24.270 に答える