前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >各种读入方式速度比较

各种读入方式速度比较

作者头像
attack
发布2018-04-11 16:51:11
8540
发布2018-04-11 16:51:11
举报
文章被收录于专栏:数据结构与算法

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

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

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

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

my(这是个超级大蒟蒻)

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
 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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-10-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • my(这是个超级大蒟蒻)
  • zyh:
  • hzwer
  • cin
  • cin+ios优化
  • scanf
  • fread
  • 评测环境
  • 评测方式
  • 测试1:对于le6的int随机数据读入
  • 测试2:对于1e7的int随机数据读入
  • 测试3:对于1e6的long long 随机数据读入
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档