zoukankan      html  css  js  c++  java
  • 各种读入方式速度比较

    以前写过一篇比较scanf与cin的博客,但是那篇博客存在很多bug,测速也很不规范。

    今天我收集了一下众大佬的读入优化,来做个比较

    特别鸣谢:my,zyh,hzwer,lyq

    首先看一下各位大佬的读入优化

    my(这是个超级大蒟蒻)

    这是我自己yy着写出来的,虽然长得丑,但是也不快

    1 inline void read(int &n)
    2 {
    3     char c=getchar();bool flag=0;n=0;
    4     while(c<'0'||c>'9')    c=='-'?flag=1,c=getchar():c=getchar();
    5     while(c>='0'&&c<='9')    n=n*10+c-48,c=getchar();flag==1?n=-n:n=n;
    6 }

    zyh:

    1 inline void read(int &x)
    2 {
    3     char ch=getchar();x=0;int f=1;
    4     for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
    5     for(;isdigit(ch);ch=getchar())x=x*10+ch-'0';x=x*f;
    6 }

    学姐的读入优化写法应该是介于我和hzwer之间的,而且用了isdigit黑科技

    hzwer

    1 inline int read()
    2 {
    3     int x=0,f=1;char c=getchar();
    4     while(c<'0'||c>'9')    {if(c=='-')    f=-1;c=getchar();}
    5     while(c>='0'&&c<='9')    x=x*10+c-48,c=getchar();    return x*f;
    6 }

    AG爷的读入优化,不知道速度怎么样

    cin

    cin+ios优化

    scanf

    (我仨是来打酱油的)

    fread

     1 inline char nc(){
     2     static char buf[100000],*p1=buf,*p2=buf;
     3     return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
     4 }
     5 inline int read()
     6 {
     7     char ch=nc();int sum=0;int flag=1;
     8     while(!(ch>='0'&&ch<='9')){ch=nc();if(ch=='-')flag=-1;}
     9     while(ch>='0'&&ch<='9')sum=sum*10+ch-48,ch=nc();
    10     return sum*flag;
    11 }

    全网公认最强的IO优化写法

    评测环境

    就是机房里的电脑

    评测方式

    随机生成一组数据

    测试不同的读入方式对相同的数据的读入速度

    一种方式测试3-4次

    单位:S

    测试1:对于le6的int随机数据读入

    cin 1.716 1.711 1.823 1.705
    cin+ios 0.4576 0.346 0.3471 0.3461
    scanf

    0.4189

    0.3669 0.3714 0.3761
    my 0.1762 0.1499 0.1493 0.1508
    zyh 0.217 0.1505 0.1504 0.1533
    hzwer

    0.1626

    0.1519 0.1357 0.1348
    fread 0.2388 0.1229 0.1257 0.1228

    不难看出,对于1e6的数据读入差距已经非常明显了

     

    测试2:对于1e7的int随机数据读入

    cin 17.01 16.93 17.13
    cin+ios 3.44 3.413 3.416
    scanf

    3.606

    3.583 3.575
    my  1.478  1.419 1.418
    zyh 1.42 1.424 1.423
    hzwer

    1.372

    1.258 1.26
    fread 1.161 1.14 1.14

    唔。。。和上面的排名基本类似

    测试3:对于1e6的long long 随机数据读入

    cin 1.649 1.648 1.647
    cin+ios 0.4287 0.3868 0.3863
    scanf

    0.4644

    0.386 0.3819
    my 0.1525 0.1489 0.1499
    zyh 0.1563 0.1588 0.1554
    hzwer

    0.1548

    0.1388 0.1395
    fread 0.1378 0.1199 0.1253

    排名并没有发生多大变化...

    总结

    通过上面三组测试,各种读入方式的快慢已经比较清晰了

    如果按照评分的话大概可以总结为

    cin<cinios≈scanf<my≈zyh<hzwer<fread

  • 相关阅读:
    好物推荐,码出高效
    C#设置session过期时间
    [C#] Request.QueryString()测试:用html而非asp控件实现简单登录验证并保存值到Session中
    .aspx页面 用html按钮传送数据到 .aspx.cs后台的和“利用Ajax连接aspx与aspx.cs”方法记录
    Visual Studio出现“ 激活远程语言服务器 c#/Visual Basic 语言服务器客户端出错”请运行devenv/log并检查…………“错误解决办法
    解决ubuntu server下屏幕显示不全问题的详解
    关于ubuntu选择desktop版本还是sever版本的一篇随笔
    MAC系统npm安装依赖,报错npm ERR! code ECONNREFUSED
    Linux 常用命令总结
    Mac电脑查询IP
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/7707841.html
Copyright © 2011-2022 走看看