在c++中,我们使用cin和cout进行输入输出会比用scanf和printf更加简洁和方便,但是当程序有大量IO的时候,使用cin和cout进行输入输出会比用scanf和printf更加耗时,

在数据量较小时则无明显差别。如果没要求效率的话,用cin和cout或scanf和printf都行;但是如果有效率要求的话,就另说了,比如在刷OJ的时候经常会遇到超时的问题,

这时就要考虑程序的效率了。具体如下:

在有大量IO的情况下,如果你仍然想用cin、cout,也有一种办法能解决效率问题,就是在主函数里面添加下面这条语句:

std::ios::sync_with_stdio_(flase);

通常把这条语句放在主函数的开头,作为第一条语句,以应对大量的IO,减少耗时。或者如果你不想用这种方法,那就直接用c里面的scanf和printf,

这也能大大减少耗时,不过别忘了包含头文件<cstdio>。下面说一下为啥cin、cout会比scanf、printf更耗时(我也是在网上查了一些资料才了解的,如有不对之处,欢迎指正)

cin耗时的一个重要原因就是 cin与stdin(标准输入输出)总是同步的,cin在内部实现的时候会同步输入到缓存区,输入流会时刻与输入缓冲保持同步,这就产生很多额外开销,

从而在有大量IO时,就会很耗时。在上面的例子中我们添加了一条语句: std::ios::sync_with_stdio_(flase); 就能减少耗时,这是因为有了这条语句后,系统就会取消与stdin同步,

从而可以适当提高效率,但是与scanf相比还是差了一点。

另外再说一下cout,它和cin是有点类似的。cout在输出的时候并不是是直接输出,而是先将要输出的数据放入缓存区,这就会产生额外开销,更加耗时;而printf在输出的时候

是直接调用系统来进行输出的,不需要缓存,所以cout会比printf更慢。

下面的这个链接写的挺好的,也更详细:https://blog.csdn.net/ShannonNansen/article/details/76090172

c++使用cin、cout与c中使用scanf、printf进行输入输出的效率问题的更多相关文章

  1. cin/cout与scanf/printf的比较

    转自http://www.cnblogs.com/penelope/articles/2426577.html  cin .cout   基本说明: cin是标准输入流对象,代表标准输入设备(键盘), ...

  2. cin 和 getline 混用中需要注意的问题

    这段时间在刷题过程中遇到一个cin和getline混合使用中的问题,解决之后记录如下: 先来看一段代码 #include <iostream> #include <string> ...

  3. C++输入输出流 cin/cout 及格式化输出简介

    C++ 可通过流的概念进行程序与外界环境( 用户.文件等 )之间的交互.流是一种将数据自源( source )推送至目的地( destination )的管道.在 C++ 中,与标准输入/输出相关的流 ...

  4. acdream B - 郭式树 (水题 卡cin,cout, 卡LL)

    题目 输入正好是long long的最大, 但是答案超long long 所以用unsigned, 不能用cin cout否则一定超时: 不能用abs(), abs 只用于整数. unsigned   ...

  5. printf scanf cin cout的区别与特征

    printf和scanf是c语言的输入输出,学习c++以后,自然是用cin cout这两个更简单的输入输出 printf scanf 都需要进行格式控制,比较麻烦,但优点是速度比较快,毕竟多做了一些事 ...

  6. cin,cout,printf,scanf效率对比

    From:http://www.cnblogs.com/killerlegend/p/3918452.html Author:KillerLegend Date:2014.8.17 杭电OJ之3233 ...

  7. 892B. Wrath#愤怒的连环杀人事件(cin/cout的加速)

    题目出处:http://codeforces.com/problemset/problem/892/B 题目大意:一队人同时举刀捅死前面一些人后还活着几个 #include<iostream&g ...

  8. 8-cin cout PK scanf printf(速度快慢问题对比)

    我们在c++ 中使用cin cout很方便但速度很慢,导致有些题目用cin就超时而用scanf则就ac了,那到底改用谁? cin慢是有原因的,其实默认的时候,cin与stdin总是保持同步的,也就是说 ...

  9. NOIP比赛中如何加速c++的输入输出

    NOIP比赛中如何加速c++的输入输出 在竞赛中,遇到大数据时,往往需要更快的读取方式.由于比赛中输出一般规模较小,本文只讨论输入如何加速. 现在我们生成1000000个随机数,构成1000*1000 ...

随机推荐

  1. C#算法实现获取树的高度

    我们知道,树类型作为数据结构中的重要一员,树的很多实现都是来自递归.本文想要实现的就是在桌面客户端项目开发中,经常用到的树结构(.Net平台下有个控件为TreeView).事实上,我们可能因业务需求自 ...

  2. Java实验五参考答案

    1.找错误 btOK.setOnAction( new EventHandler<ActionEvent> { public void handle (ActionEvent e) { S ...

  3. 1642: 【USACO】Payback(还债)

    1642: [USACO]Payback(还债) 时间限制: 1 Sec 内存限制: 64 MB 提交: 190 解决: 95 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 &quo ...

  4. 人生靠反省,Java靠泛型

    昨天有同事问 UserService.XxxService 都会调用 Dao 的 insert.update ... ...,这些重复的代码,有没有办法变得灵活一些? 巧了,和咱们分享的主题刚好碰上, ...

  5. .git/info/refs not valid: is this a git repository?

    今天用idea git提交的时候遇到了这个神奇的问题.git/info/refs not valid: is this a git repository? 看了很多网上的都不靠谱,最后自己乱点着找, ...

  6. eclipse常用功能及快捷键

    1.更改默认字体 Window->Preferences->General->Appearance->Colorsand Fonts ->Basics->Text ...

  7. MyBatis 学习笔记(1)

    MyBatis 的基本构成 SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成 SqlSessionFactory(工厂接口) SqlSessionFactor ...

  8. PTA | 1016 部分A+B (15分)

    正整数 A 的"DA(为 1 位整数)部分"定义为由 A 中所有 DA 组成的新整数 PA.例如:给定 A=3862767,DA=6,则 A 的"6 部分"PA ...

  9. 【mysql】mysql优化

    一,表设计 1.1. E-R(entity relation)实体关系图 长方形 实体 表 椭圆形 属性 字段 菱形 关系 一对一 多对一 属于 多对多 1.2. 三范式标准 原子性 个人信息 省市县 ...

  10. template_homepage

    homepage用到的方法 使用 {% for ... in ...%}  加 {% endfor %} 实现循环结构 举例:  {% for post in posts %} <p style ...