关于:乱用ios::sync_with_stdio(false);cin.tie(nullptr);的后果

今天做HNCPC2015重现赛,做到《简单的图论问题?》怎么交,怎么WA,赛后补题发现一个致命今天做HNCPC2015重现赛,做到《简单的图论问题?》怎么交,怎么WA,赛后补题发现一个致命错误,看WA代码片段:

    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int Case=0;
    while(cin >> n >> m >> r1 >> c1 >> r2 >> c2)
    {
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=m; j++)
            {
                char s[4];
                scanf("%s",s);
                if(s[0]=='*')mp[i][j]=-1;
                else mp[i][j]=atoi(s);
            }
        }
        printf("Case %d: %d %d\n",++Case,bfs1(r1,c1),bfs2(r1,c1));
    }


为了加快cin和cout输入输出流,加上<ios::sync_with_stdio(false);cin.tie(nullptr);>关闭流经过缓冲区以及和stdin的绑定,结果怎么交怎么错。后来,把这两行代码注释掉后提交就AC了!!爷裂了。以后比赛还是不用cin和cout了,老老实实用scanf和printf吧.......本来想cin和cout刷刷刷打过去,还是用回scanf吧....还是得追求稳定和效率.....

这里讲点小知识吧。
为什么两句代码加快流速度?
`std::ios::sync_with_stdio(false);`在c++中之所以cin,cout效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段语句可以来打消iostream的输入和输出缓存,可节省时间,使效率与scanf与printf相差无几。
`cin.tie(nullptr);`在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)(0表示NULL)来解除cin与cout的绑定,进一步加快执行效率。
网上查阅资料时,都在强调, 不要混用!不要混用!不要混用!今日,见识到了,欸,习惯太差了.......

有人能帮我解释一下为什么错误吗?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值