各种读入方式速度比较
以前写过一篇比较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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Mysql进阶-2】图文并茂说尽Mysql索引
- 1.8W字|了不起的 TypeScript 入门教程(第二版)
- 【Mysql进阶-3】大量实例悟透EXPLAIN与慢查询
- 基于helium自动化测试的方法进行代码仓库梳理和备份
- 【SpringBoot注解-5】web项目相关注解
- rxjs里的Observable对象如何消费
- 正则表达式入门
- (在模仿中精进数据可视化02) 温室气体排放来源可视化
- ROS机器人URDF建模
- 这是我见过最牛逼的Shell,619行代码!
- 设计模式(五):利用原型模式复制几个葫芦娃
- Vue中数组变动监听
- which命令
- 如何将tensorflow1.x代码改写为pytorch代码(以图注意力网络(GAT)为例)
- tomcat设置好环境变量,依然无法通过cmd startup命令启动