专栏首页数据结构与算法各种读入方式速度比较

各种读入方式速度比较

以前写过一篇比较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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 判断数组内是否有几个元素之和等于m

    1 #include<iostream> 2 using namespace std; 3 int a[10001]; 4 int f(int n,in...

    attack
  • 洛谷P1876 开灯

    题目背景 该题的题目是不是感到很眼熟呢? 事实上,如果你懂的方法,该题的代码简直不能再短。 但是如果你不懂得呢?那。。。(自己去想) 题目描述 首先所有的灯都是...

    attack
  • 洛谷P1970 花匠(dp)

    直接用\(f[i][0/1]\)表示到第\(i\)个位置,该位置是以上升结尾还是以下降结尾

    attack
  • P1914 小书童——密码

    用户7727433
  • 在VMware虚拟机软件中安装的Ubuntu虚拟机的窗口不能自动调整大小的解决办法

    在 VMware虚拟机软件 中安装的 Ubuntu虚拟机 的窗口不能自动调整大小的解决办法:

    黑泽君
  • 使用 canvas 画图时图像文字模糊的解决办法

    最近在使用 canvas 画图的时候,遇到了图像文字模糊的问题,解决思路就是根据分辨率绘制不同尺寸的画布。以下是创建高分辨率画布的代码:

    叙帝利
  • 布隆过滤器的java实现

    private static final int DEFAULT_SIZE = 2 << 29;//布隆过滤器的比特长度

    sanmutongzi
  • 程序员必看的十部电影

    不同的行业领域中很多时候都分享着共同的思想和理念。比如,大量的计算机编程中涉及到的概念都被运用到了电影里。有些概念出现在电影里后变得如此之酷,甚至反过来能帮助我...

    程序员互动联盟
  • 纹理拼接后的Wrap寻址

    ShaderX3 : Improved Batching via Texture Atlases

    逍遥剑客
  • catalan---卡特兰数(小结)

    (关于卡特兰数的详细介绍)http://baike.baidu.com/view/2499752.htm 下面有练习的题目: 经过测试,_int64/long...

    Gxjun

扫码关注云+社区

领取腾讯云代金券