在算法题中涉及到大量数据读入的时候,通常建议大家避免使用cin读入数据而改用scanf,原因是scanf相对速度更快。
解决方法
1. cin效率低的原因一是在于默认cin与stdin总是保持同步,cin会把要输出的东西先存入缓冲区,进而消耗时间。通过关闭同步,可以有效提高cin效率;
2. 默认情况下cin绑定的是cout,每次执行<<的时候都要调用flush,进而增加IO负担,因此可以通过tie(0)解绑。
代码:
#include <iostream>
using namespace std;
int main(){
ios::sync_with_stdio(false);
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
}
关闭同步之后,cin与scanf的执行效率相差无几
注意事项
如果在同一个流上使用两组 I/O 函数(头文件<stdio.h>/<cstdio>和<iostream>)(例如stdin流同时关联cin与scanf),那么最好让它们保持同步;
如果任何一个流只使用一个 I/O 系列,则可以关闭同步(比如在各自涉及单独的流的情况下,可以同时使用scanf与cin)。
保险起见,关闭同步之后请不要同时使用C与C++的读写方式,避免不必要的麻烦。