-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 回答