讨论C++的cin/cout与C的scanf/printf
2017-07-24 19:13
651 查看
前言:
在中国台湾省网友的一篇博客里注意到了这个point,在这里Mark一下给更多人看到。详细论证过程我就不贴了,直接上结果和简化的过程吧。
对于cin
:
在Ubuntu 14.04笔电环境中对一个档案写入1e7的random整数,这裡的程式码都是简化的code。for(int i = 0; i < (int)1e7; i++){ printf("%d\n",rand()); } // vs for(int i = 0; i < (int)1e7; i++){ cout<<rand()<<endl; }
实验三次,printf的时间是:
1.760 s
2.677 s
1.865 s
cout:
15.921 s
15.188 s
15.685 s
优化:
在main()函数中加上一行
ios_base::sync_with_stdio(false);并将
endl换成
'\n'。
ios_base::sync_with_stdio(false); for(int i = 0; i < (int)1e7; i++){ cout<<rand()<<'\n'; }
结果:
2.765 s
1.708 s
1.713 s
去掉一些误差之后,可以看作是和
printf相等。
对于cout
:
吃一些数字进来,然后再输出:for(int i = 0; i < (int)1e7; i++){ scanf("%d\n",&a); printf("%d\n",a+1); //output a+1; } // vs for(int i = 0; i < (int)1e7; i++){ cin>>a; cout<<a+1<<endl; }
scanf/printf的时间:
2.579 s
3.994 s
3.241 s
而cin/cout:
19.970 s
优化:
加上一行cin.tie(0);同时再包含对
cin的优化。
ios_base::sync_with_stdio(false); cin.tie(0); for(int i = 0; i < (int)1e7; i++){ cin>>a; cout<<a+1<<'\n'; }
于是有:
2.956 s
2.889 s
3.509 s
可以说是和scanf和printf差不多了。
总结:
在main函数里加上下面的代码并把endl换成
'\n'就可以得到如上优化结果。
ios_base::sync_with_stdio(false); cin.tie(nullptr);
除此之外,事实上,当把数字范围放大到1e8的时候:
scanf/printf:
30.722 s
29.428 s
cin/cout:
27.052 s
27.097 s
可以看到,cin/cout的表现已经比scanf/printf好了。
相关文章推荐
- c/c++ cin>> cout<< scanf() printf() 返回值
- C++的cin/cout为什么比C语言的scanf/printf慢
- 【C++】cin、cout的效率比scanf和printf低的解决方法
- 【C++】cin、cout的效率比scanf和printf低的解决方法
- c++中简单的i/o操作(cin,cout,scanf,printf)
- c++中cin/cout与scanf/printf的区别比较
- c++中简单的i/o操作(cin,cout,scanf,printf)
- C++-cin与scanf cout与printf效率问题
- 在PAT这个oj中还是scanf和printf的耗时少于cin和cout
- NYOJ 685 查找字符串 字典树 map容器 吐血经验 cin cout 与printf scanf
- cin,cout与scanf,printf的效率问题
- scanf,cin,printf,cout,putchar效率比较
- C++ 的 cin/cout 为什么比 C 语言的 scanf/printf 慢
- printf,scanf,cin,cout的输入输出
- cin cout scanf printf
- cin、cout 与 scanf、printf 的效率比较
- 再一次看到了cin cout比scanf和printf耗时。(有关文件差异的比较方法在后面)
- scanf&printf VS cin&cout
- cin,cout与scanf,printf
- 7、字符串的输入与输出scanf、printf、cin、cout、gets、puts