关于C++的cin/cout效率低于scanf/printf的疑惑和处理之道
  • 板块灌水区
  • 楼主zyc220207
  • 当前回复17
  • 已保存回复17
  • 发布时间2023/2/24 18:27
  • 上次更新2023/10/23 23:56:53
查看原帖
关于C++的cin/cout效率低于scanf/printf的疑惑和处理之道
927977
zyc220207楼主2023/2/24 18:27

在信息学奥赛中,经常出现数据集超大造成 cin TLE的情况。这时候大部分人(包括原来我也是)认为这是cin的效率不及scanf的错,甚至还上升到C语言和C++语言的执行效率层面的无聊争论。

其实这只是C++为了兼容 C 而采取的保守措施。

我们可以在IO之前将stdio解除绑定,这样cin/cout的效率就跟scanf/printf差不多了。

解除绑定语句:

ios::sync_with_stdio(false);//取消cin与scanf的同步,使cin/cout效率与scanf与printf相差无几。

注意:这行代码与scanf/printf不能混用,否则会造成输入/输出异常。

另外:

在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)(0表示NULL)来解除cin与cout的绑定,进一步加快执行效率。

如下所示:

#include<bits/stdc++.h>
using namespace std;
int main()
{
      ios::sync_with_stdio(false);
      //取消cin与scanf的同步,使cin/cout效率与scanf与printf相差无几。
      //注意:这行代码不能与scanf、printf混用,否则会造成异常。
      cin.tie(0);
      cout.tie(0);                        //黑科技cin,cout加速
      // 
      //你的程序代码
      //
      return 0; 
}
2023/2/24 18:27
加载中...