网站建设教程大全 百度网盘,网站如何做线上支付功能,wordpress采集后排版,seo人才招聘相信使用C的人都有一种迷惑或者是不自信#xff1a;在输入输出的时候是不是应该使用scanf/printf更好呢#xff0c;因为传说cin/cout龟速#xff0c;我当时也长期被这个所困扰#xff0c;后来在阅读C primer第五版的时候我自己做了一个测试#xff0c;发现如果不使用std::…相信使用C的人都有一种迷惑或者是不自信在输入输出的时候是不是应该使用scanf/printf更好呢因为传说cin/cout龟速我当时也长期被这个所困扰后来在阅读C primer第五版的时候我自己做了一个测试发现如果不使用std::ios_sync_with_stdio(false);关闭和C库函数的同步的话的确scanf/printf快很多大概相差五倍但是如果关闭同步的话cin/cout是比scanf/printf快8%-10%的。这两个数据是我后面看别人测量的我自己只是简单测量了一下
之所以关闭缓冲以后cin/cout比较快是因为cin/cout对输入参数和类型的推断是在编译时确定的而scanf/printf是在运行时确定的。
在我以前的一篇博客CPrimer学习笔记第1章 开始中我提到了这一点。
如果认为我自己的测量可能有误差可以看一下大神们的回答 Cin-Cout vs Scanf-Printf Using scanf() in C programs is faster than using cin?
和我的说法是一致的以后被人怼你怎么还用cin/cout的时候你可以拿出这些测评让他们瞧瞧我们也应该对C自信起来不要想着C没有C底层好像速度就差一些。
但是之前参加竞赛的时候我信心满满地使用cin/cout进行输入输出却总是TEL我以为是程序算法的问题检查了好久好久最后才发现是因为使用了cin/cout的原因改成scanf/printf后程序就AC了看到这里你是不是心里一惊搞什么嘛上面的测评都是唬人的嘛
其实之所以即使关闭了和C库的同步我的程序还会TEL和cin/cout没有什么关系罪魁祸首是endl相信很多学习C的人都和我一样习惯了使用endl进行换行同时刷新缓冲区一举两得美滋滋但是其实正是因为endl会强制刷新缓冲区导致频繁的IO操作使得程序效率迅速降低。因此除非是使用打桩调试就是及时输出调试信息因为这里我们要求输出信息有时效性所以要及时刷新缓冲区否则都不要使用endl而使用\n进行换行。
知道了这两点
std::ios::sync_with_stdio(false);
cout Hello world \n;我们就可以放心地使用cin/cout进行输入输出啦而且效率肯定是最快的。
在使用cin进行循环读入的时候可能会遇到一点问题可以参考一下我以前写的一篇博客C cin 实现循环读入
有了上面的准备我们就可以使用cin/cout开心地写代码啦。