c++小白提问,在循环中利用map容器的指针时出现错误

#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
int main()
{
    map<int, double>xishu;
    map<int, double>result;
    int K;
    cin >> K;
    while(K--){
        int a;
        double d;
        cin >> a >> d;
        xishu[a] = d;
    }
    cin >> K;
    while (K--) {
        int a;
        double d;
        cin >> a >> d;
        for (auto it = xishu.begin(); it != xishu.end();) {
            it++;
            result[a + (it->first)] = d * (it->second);
        }
    }
    cout << result.size();
    for (auto it = result.end(); it != result.begin();) {
        it--;
        printf(" %d %.1f", it->first, it->second);
    }
}

这个循环第一次是可以运行的,第二次就出现这个错误了

for (auto it = xishu.begin(); it != xishu.end();) {
    it++;
    result[a + (it->first)] = d * (it->second);
}

这个迭代器赋值出错了,每次进入循环体,迭代器it都要自增,当第二次循环时,it++已经是end了,然后你在使用it去访问firsh()和second()这两个函数,导致了报错!

你好,提供一种参考思路,你将第23行和第24行相互替换一下位置,先获取结果,再++

这是我改了之后的一些测试样例,看看是不是解决你的问题,如果已解决,麻烦点个采纳,如果还没解决,请继续留言你所需要达到的效果! 

 

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y