zoukankan      html  css  js  c++  java
  • c++使用cin、cout与c中使用scanf、printf进行输入输出的效率问题

       在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   

  • 相关阅读:
    SpringBoot EnumValidator验证器实现
    【原创】SpringCloud:基于Spring Cloud netflix全家桶搭建一个完整的微服务架构系统
    Hystrix Dashboard监控报“Unable to connect to Command Metric Stream”?
    Mysql sql_mode的合理设置
    nginx 调优
    函数指针
    进程与线程
    大小端学习
    联合体和结构体
    内存分配
  • 原文地址:https://www.cnblogs.com/buanxu/p/12751353.html
Copyright © 2011-2022 走看看