在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。cin慢是有原因的,其实默认的时候,cin与stdin总是保持同步的,也就是说这两种方法可以混用,而不必担心文件指针混乱,同时cout和stdout也一样,两者混用不会输出顺序错乱。正因为这个兼容性的特性,导致cin有许多额外的开销,如何禁用这个特性呢?只需一个语句std::ios::sync_with_stdio(false);,这样就可以取消cin于stdin的同步了。
在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)(0表示NULL)来解除cin与cout的绑定,进一步加快执行效率。
使用cout,要少用endl,而是用' '来代替它。https://www.jianshu.com/p/5bffe6faaf17
缺点:关闭同步后,就不能cin和scanf混用了。
加上noi竞赛常用的freopen,模板代码如下:
int main(){ freopen("data.in","r",stdin); freopen("data.out","w",stdout); ios::sync_with_stdio(false); cin.tie(0); ... ... }