acm时加快cin和cout

在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。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,而是用'\n'来代替它。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);
    ...
    ...
}

 

posted @ 2020-08-27 19:10  立体风  阅读(266)  评论(0编辑  收藏  举报