各种读入方式速度比较

以前写过一篇比较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 条评论
登录 后参与评论

相关文章

来自专栏专知

【开源】基于Keras的知识图谱处理实战

【导读】近日,Daniel Shapiro博士利用开源的图结构卷积网络进行知识图谱处理,并应用于交易数据的欺诈检测,其知识图谱处理相关源码也开源出来,并且Dan...

1K4
来自专栏AlgorithmDog的专栏

拖拽式机器学习的爱与恨

拖拽式机器学习是我想了很久的问题。 ? 1. 前世今生 拖拽式机器学习是,人们在界面上通过拖拽就是建立机器学习过程。拖拽式机器学习系统一...

3866
来自专栏PPV课数据科学社区

R知识速查表-值得bia在墙上

Cheat Sheets也称作为cheatsheet,中文翻译过来就是速查表或小抄表,类似我们考试前将公式方程或大事记记录到一张纸上。截止到2018年RStud...

3895
来自专栏机器学习算法原理与实践

英文文本挖掘预处理流程总结

    在中文文本挖掘预处理流程总结中,我们总结了中文文本挖掘的预处理流程,这里我们再对英文文本挖掘的预处理流程做一个总结。

1312
来自专栏快乐八哥

数据可视化-EChart2.0使用总结2

接上一篇博客,这篇博客主要讨论EChart里面的散点图、气泡图和雷达图。 4.散点图-Scatter Chart 适合场景:三维数据集,但是只有两个维度需要比较...

2356
来自专栏机器学习算法与Python学习

深度学习框架Caffe/CNTK/Tensorflow/Theano/Torch的评估与比较

分享 有问题请到留言区互动 人工智能无疑是计算机世界的前沿领域,而深度学习无疑又是人工智能的研究热点,那么现在都有哪些开源的深度学习工具,他们各自的优缺点又是什...

4048
来自专栏携程技术中心

干货 | 去哪儿酒店算法服务平台

作者简介 张中原,2011年加入去哪儿网,先后从事交易系统、酒店数据、公司基础平台与组件、存储和监控等相关工作,曾长期担任应届生技术培训和指导。 最近几年时间,...

43010
来自专栏奇点大数据

神器Pytorch(1)

话说,自从我自己入坑深度学习以来,也是用了不少的框架,什么Tensorflow、Chainer、Theano、Caffe、Torch等等。鉴于赶时髦以及对谷歌老...

4445
来自专栏Y大宽

Cytoscape插件2:CytoHubba

CytoHubba:发现复杂网络的关键目标和子网络 网络对呈现包括PPI,基因调控,细胞路径和信号转导等多种类型生物数据非常有用。我们//+重要性,并且这也能...

9801
来自专栏数据结构与算法

SID1190471 / 烦人的幻灯片 暴力出奇迹 !!!!!!!!!!!!!!!!!!

PID221 / 烦人的幻灯片 ☆ 你还木有做过哦 我的状态 查看最后一次评测记录 质量还不能统计出来哦~ 题目评价 质量 无 ★★★★★ ★★★★☆ ★...

4077

扫码关注云+社区

领取腾讯云代金券