解决cin、cout效率远低于scanf、printf的问题

简介: ac算法时cin和cout效率过慢

用C++ iostream.h中cin、cout书写十分方便,却存在效率低的问题,耗时往往是stdio.h中scanf、printf的好几倍。尤其是当输入、输出数据量较大时,经常会出现Time Limit Exceeded的情况。

但使用scanf输入字符串就比较麻烦,例如一个string类型字符串,必须经过转换:

string s;//声明
s.resize(11);//限定大小
scanf("%s", &s[0]);//输入
在PAT刷题时,偶然发现了一片新大陆,只需在main函数第一行加上:

std::ios::sync_with_stdio(false);

因为C++为了兼容C,保证程序在使用了std::printf和std::cout的时候不发生混乱,将输出流绑到了一起。这行代码的作用便是取消iostream与stdio的默认关联同步,取消同步后的iostream的性能倍增,能与stdio相差无几。只要注意不要再混用iosteam和stdio即可,否则可能会出现预料之外的错误。

还能进一步提升效率,再加上:

std::cin.tie(0);

因为默认的情况下,cin绑定的是cout,每次执行 << 时都要调用flush,增加了IO负担。可通过tie(0)解除cin与cout的绑定,进一步加快执行效率。

示例代码如下:

include

using namespace std;
int main()
{

ios::sync_with_stdio(false);
cin.tie(0);
// IO

}
有了这两个神器,以后就能愉快地使用cin、cout了。

参考大佬:https://www.jianshu.com/p/469b5632fb26

相关文章
|
3天前
cout,printf的++,--优先问题
cout,printf的++,--优先问题
14 0
|
7月前
|
编译器 C语言 C++
如何解决VS中scanf使用时报错或无法使用的问题
如何解决VS中scanf使用时报错或无法使用的问题
113 0
|
10月前
|
缓存
scanf和getchar大家都用过吧!那么缓存区的概念你必须了解!(下)
scanf和getchar大家都用过吧!那么缓存区的概念你必须了解!(下)
55 0
|
5月前
|
安全 C语言 C++
VS中使用scanf函数报错如何解决?
VS中使用scanf函数报错如何解决?
26 0
|
7月前
|
缓存 C++
C++的输入与输出:cin与cout
C++的输入与输出:cin与cout
|
10月前
|
存储 缓存 vr&ar
scanf和getchar大家都用过吧!那么缓存区的概念你必须了解!(上)
scanf和getchar大家都用过吧!那么缓存区的概念你必须了解!
55 0
|
11月前
|
编译器
更深度了解getchar和putchar现象
更深度了解getchar和putchar现象
|
11月前
|
C++
C++(cout和printf的使用小结)
C++(cout和printf的使用小结)
|
11月前
|
C语言
论Scanf、Gets、Getchar的区别
论Scanf、Gets、Getchar的区别
113 0