关于printf/scanf 与 cin/cout 输入输出的速度研究
2016-12-01 21:59
417 查看
这是我的第一篇研究型博客……
好吧,步入正题。
我们经常听别人说:cin/cout 输入输出慢,printf/scanf 大法好,那么 cin/cout 究竟有多慢?
为此我写了一个数据生成器,其实就是生成了 1-5000000 的一个递增序列,生成的文件大小有38.9 MB (38,888,896 字节)。
现在有两个程序干同一件事:把这个文件输入,原样输出,但一个是 cin/cout,一个是 printf/scanf。
可以看出,两则程序除了输入输出之外,没有什么区别。
但它们分别运行了多久呢?
我们用Linux下的time命令测时间。
time命令:http://baike.baidu.com/subview/10368/12526581.htm
结果如何呢?
呵呵……显而易见,当然是 printf/scanf 更快啦。
不过,传说中取消 cin/cout 与 stdio 的同步以后会更快,差不多与 printf/scanf 相当,我们来试一试!
看吧!的确是差不多了。
注意: 取消同步后,不要在程序里再使用 printf/scanf 等 cstdio 中的输入输出(文件操作除外)!否则后果……
就先研究这么多,我要去复习了:http://blog.csdn.net/Zn_Hua/article/details/53437724
参考:http://www.hankcs.com/program/cpp/cin-tie-with-sync_with_stdio-acceleration-input-and-output.html
好吧,步入正题。
我们经常听别人说:cin/cout 输入输出慢,printf/scanf 大法好,那么 cin/cout 究竟有多慢?
为此我写了一个数据生成器,其实就是生成了 1-5000000 的一个递增序列,生成的文件大小有38.9 MB (38,888,896 字节)。
现在有两个程序干同一件事:把这个文件输入,原样输出,但一个是 cin/cout,一个是 printf/scanf。
#include<iostream> #include<cstdio> using namespace std; int main() { freopen("test.in","r",stdin); freopen("test.out","w",stdout); int x; for(int i=1;i<=5000000;++i) { scanf("%d",&x); printf("%d",x); } fclose(stdin); fclose(stdout); return 0; }
#include<iostream> #include<cstdio> using namespace std; int main() { freopen("test.in","r",stdin); freopen("test.out","w",stdout); int x; for(int i=1;i<=5000000;++i) { cin>>x; cout<<x; } fclose(stdin); fclose(stdout); }
可以看出,两则程序除了输入输出之外,没有什么区别。
但它们分别运行了多久呢?
我们用Linux下的time命令测时间。
time命令:http://baike.baidu.com/subview/10368/12526581.htm
结果如何呢?
呵呵……显而易见,当然是 printf/scanf 更快啦。
不过,传说中取消 cin/cout 与 stdio 的同步以后会更快,差不多与 printf/scanf 相当,我们来试一试!
#include<iostream> #include<cstdio> using namespace std; int main() { ios::sync_with_stdio(false);//这两行语句取消了同步 cin.tie(0); //和其他占时间的因素。 freopen("test.in","r",stdin); freopen("test.out","w",stdout); int x; for(int i=1;i<=5000000;++i) { cin>>x; cout<<x; } fclose(stdin); fclose(stdout); }
看吧!的确是差不多了。
注意: 取消同步后,不要在程序里再使用 printf/scanf 等 cstdio 中的输入输出(文件操作除外)!否则后果……
就先研究这么多,我要去复习了:http://blog.csdn.net/Zn_Hua/article/details/53437724
参考:http://www.hankcs.com/program/cpp/cin-tie-with-sync_with_stdio-acceleration-input-and-output.html
相关文章推荐
- 7、字符串的输入与输出scanf、printf、cin、cout、gets、puts
- boj problem 1330 顺利AC 注意输入或输出数据较多时 scanf printf 比cin cout快非常多~
- cin,cout与scanf,printf的速度到底相差多少
- cin,cout与scanf,printf的速度到底相差多少
- cin,cout与scanf,printf的速度到底相差多少
- 如果你想知道cin,cout究竟和scanf,printf速度上有什么差别~~
- fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出
- NYOJ 685 查找字符串 字典树 map容器 吐血经验 cin cout 与printf scanf
- C函数printf中不能使用%lf,而用%f输出double,而函数scanf却必须用%lf来输入double
- eclipse中的关于scanf和printf的输入顺序的解决办法
- fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出
- C++输入与输出—cout和cin的用法
- cin cout 快速输入输出(效率优化)
- c++中简单的i/o操作(cin,cout,scanf,printf)
- [C++基础]cout与wcout,printf与wprintf,ofstream与wofstream关于输出中文的问题解决
- cin,cout与scanf,printf 差别
- 关于cout,wcout输出的测试,以及printf,wprintf 输出中文,内存中直接输出图像给网页问题
- cin cout 快速输入输出(效率优化)
- cout,cin和printf()及scanf()的比较。-------------Mobile phones---------树状数组
- scanf和printf函数家族用于格式化输入和输出(转)