zoukankan      html  css  js  c++  java
  • 关于scanf和cin的大数据读入效率

    关于scanf和cin的大数据读入效率
       好多大佬都说scanf的读入效率比cin高,我也当练手,用书上的程序作了个测试,程序如下:
    (randnum.in文件中放有1KW个4位整数)
    #include<iostream>
    #include<ctime>
    #include<cstdio>
    #include<windows.h>
    using namespace std;
    const int num=10000000;
    int main(){
    freopen("randnum.in","r",stdin);
    int i,n,start,end;
    start=clock();
    for(int i=0;i<num-2;i++)scanf("%d",&n);
    end=clock();
    cout<<double(end-start)/CLOCKS_PER_SEC<<endl;
    freopen("randnum.in","r",stdin);
    //ios::sync_with_stdio(false);关闭cin的同步
    start=clock();
    for(int i=0;i<num-2;i++)cin>>n;
    end=clock();
    cout<<double(end-start)/CLOCKS_PER_SEC<<endl;
    return 0;
    }

     结果如下:
    4.793
    6.019
    再测试一次,结果如下:
    4.793
    5.976
    基本可以认定,在默认情况(保持cin输入同步),scanf效率比cin稍高。
    然后我关闭cin的同步,执行"ios::sync_with_stdio(false);关闭cin的同步”,再测试
    结果如下:
    4.768
    1 .235
    再测试一次,结果如下:
    4.743
    1.229  
    基本可以认定,在取消cin输入同步,cin效率比scanf高很多。

      个人结论:在保持cin读入同步的情况下(默认设置),scanf的效率比cin高20%左右,关闭同步的情况下,cin比scanf的效率高285%,测试数据均为4位整数。
    测试次数有限,如有不符,请指正。
     
    温馨提示:
    1、ios::sync_with_stdio(false)是关闭输入同步,对输出基本没效果。在同等情况下,printf比cout输出效率更高。一个示例是一本通网站1205汉诺塔问题,如果用cout超时1-2个点,如果用printf能AC。
    2、在关闭cin输入同步的情况下,请不要与scanf等C的输入方法混用,否则适得其反。

    (本机软件硬件信息如下,C++环境为dev c++5.11 TDM GCC 4.9.2)
    CPU:双核i5-7500 3.41 3.40  内存:8G  系统:64位win10
  • 相关阅读:
    [转]项目管理---敏捷开发思想---带来相当愉快的项目开发过程
    [转] 项目管理---项目经理如何应对客户的需求变更?
    [转]C# 线程知识--使用Task执行异步操作
    [转]细说ASP.NET的各种异步操作
    [转]oracle表分区详解
    解决Asp.net 部署后弹出登陆框
    SVN客户端TortoiseSVN安装配置图文教程
    .net版本区别及发展历程
    CLR via c#读书笔记九:字符、字符串和文本处理
    CLR via c#读书笔记九:接口
  • 原文地址:https://www.cnblogs.com/wendcn/p/10403124.html
Copyright © 2011-2022 走看看