C++输入输出:cin/cout 还是 scanf/printf?
相信使用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
是在运行时确定的。
在我以前的一篇博客:C++Primer学习笔记:第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
开心地写代码啦。
C++输入输出:cin/cout 还是 scanf/printf?相关推荐
- C++流式输入输出加速 给 cin/cout 装个小火箭
C++流式输法加速 文章目录 C++流式输法加速 1. sync_with_stdio 和 endl 1.1 cin/cout 1.2 endl 2. cin.tie(0) External 相信很多 ...
- C++入门之cin cout
C++入门之cout语句 1.认识cin和cout c++中常用的输入输出语句有 "scanf" "printf" 和 "cin" &quo ...
- [笔记]cin、cout与scanf、printf的效率差异对比分析
之前上传UVa227 puzzle时,好不容易AC了,但发现自己用时50(ms),而在VJ上看到人家都是40ms.20ms,于是打开一个20ms的代码查看人家强在哪里.但结果研究了半天感觉差不多,于是 ...
- 牛客网循环输入输出测试——C语言scanf和printf用法
在实际的编程中需要自己写出完整的程序,预留好输入的接口,使用while循环接收多个测试用例,C语言在输出时printf要用换行"\n". 字符串输入输出问题见博客:牛客网字符/字符 ...
- scanf printf sprintf fprintf
都是C语言中的函数,但C++保留了这些函数,在头文件iostream中声明了. 1 scanf(格式控制,输出列表) printf (格式控制,输出列表) 举例: #include <iostr ...
- c函数scanf(),printf()等常用格式字符串
%d 短整形,一般占两个字节 %u 无符号短整形 %ld 长整形,一般占四个字节 %c 字符型 %s 字符串 主要用在输入输出函数:scanf(),printf()里 /a:蜂鸣, ...
- C++基础::cin/cout
cin/cout 的本质是流,cin 是输入流(istream),cout 是输出流(ostream). 进制: 默认十进制输出:cout << dec << 100 < ...
- C++中的cin cout
#include using namespace std; //c++的输入输出流头文件 1.cin ①cin>>a; 直接输入变量. ②同时输入多个变量也是一样的写法. cin a> ...
- ACM C++ cin cout 加速IO
#include <iostream> int main() {std::ios::sync_with_stdio(false);//这句话放在main里面的开始位置,就可以加速cin c ...
最新文章
- 查看mysql数据库及表编码格式
- 020_Jedis的Set数据类型
- 后台开发人员面试内容——计算机网络(五)
- python+requests进行get、post方法接口测试
- jmeter使用_jmeter概念及使用
- WPF入门教学(C#窗口、客户端)
- 20HZ信号发生器电路图
- 毕业论文页眉页脚页码插入
- iOS 安装包瘦身(下篇)
- Unity优化大全(八)之 GPU-Ligh和其他
- 纯CSS3流光边框特效
- 用Navicat连接MySQL的安装及配置
- Nonce Used1
- mybtisset where tirm 等标签的作用
- 矩形障碍算例(附Fortran计算代码及MATLAB后处理代码)
- 今日金融词汇---新股限购,是什么?
- 给浏览器设置一个图片背景/主题
- 01-kernel打补丁,配置,编译流程
- 图片如何批量重命名?其实重命名很简单
- CEGUI安装、编译、运行总结