cin输入的优化与cin和scanf混用时输入错误的问题
在算法竞赛里,cin
和scanf
都是C++比较常用的读入变量的方法,但是cin
比scanf
要慢得多。所以一般处理大量读入(百万级以上)时一般都用scanf
处理,少量数据读入时可以用cin
。
cin慢的主要原因时必须要跟标准输入输出同步,所以cin读入只要关闭与标准输入输出同步是可以加速的,关闭同步方法如下。
cin.tie(0);
ios::sync_with_stdio(0);
这样优化cin
只比scanf
稍慢,但是cin
用起来比较方便。
但是关闭输入输出是有风险的,比如当我们混用cin
和scanf
时,例如
int T;
cin >> T;
while(T--){
int n, m;
scanf("%d%d",&n,&m);
...
}
普通情况下这样读入是没有问题的,但是有时候为了加速cin
读入,可能我们会优化cin
cin.tie(0);
ios::sync_with_stdio(0);
int T;
cin >> T;
while(T--){
int n, m;
scanf("%d%d",&n,&m);
...
}
这样的话,就会发现输入的数据可能是错误的。
结论
所以我们最好不要混用cin
和scanf
,如果输入数据大,就全用scanf
,数据比较小,图方便可以用cin
+优化。如果非要混用,记得一定不能使用语句ios::sync_with_stdio(0);