关于C++的cin/cout效率低于scanf/printf的疑惑和处理之道
  • 板块学术版
  • 楼主hjsxhst2022
  • 当前回复29
  • 已保存回复29
  • 发布时间2022/8/1 21:06
  • 上次更新2023/10/27 17:27:17
查看原帖
关于C++的cin/cout效率低于scanf/printf的疑惑和处理之道
745903
hjsxhst2022楼主2022/8/1 21:06

在信息学奥赛中,经常出现数据集超大造成 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不能混用,否则会造成输入/输出异常。

注意:这行代码与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; 
}
2022/8/1 21:06
加载中...