在信息学奥赛中,经常出现数据集超大造成 cin TLE的情况。这时候大部分人(包括原来我也是)认为这是cin的效率不及scanf的错,甚至还上升到C语言和C++语言的执行效率层面的无聊争论。
其实这只是C++为了兼容 C 而采取的保守措施。
我们可以在IO之前将stdio解除绑定,这样cin/cout的效率就跟scanf/printf差不多了。
解除绑定语句:
ios::sync_with_stdio(false);
注意:这行代码与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.tie(0);
cout.tie(0);
return 0;
}