我来填坑了。
这次我用自己写的测试读入的程序来分别测试cin(不关闭流同步),scanf和读入优化的效率差别。
 
我们分别对三个阶段的数据量n进行测试,通过时间比对来观察性能的差异。
  1. n = 102
  2. n = 104
  3. n = 105
 
为了保证测试准确并且减小偶然误差,本次测试的所有数据均为随机数。
对于每一个数据量连续测试五组不同的随机数,取平均值作为参考。
 
随机数生成器:
 #include<cstdio>
#include<ctime>
#include<cstdlib>
#define random(x) (rand()%x)
const int n = ;
int main(){
freopen("testdata.in","w",stdout);
srand((unsigned int)time());
for (int i = ;i < n;i++)
printf("%d\n",random(RAND_MAX)*random(RAND_MAX));
return ;
}

一号选手cin:

 #include<iostream>
#include<cstdio>
#include<ctime>
using namespace std;
const int n = ;
int x;
int main(){
freopen("testdata.in","r",stdin);
clock_t st,ed;
st = clock();
for (int i = ;i < n;i++)
cin >> x;
ed = clock();
printf("%fseconds",(double)(ed-st)/CLOCKS_PER_SEC);
return ;
}

二号选手scanf:

 #include<iostream>
#include<cstdio>
#include<ctime>
using namespace std;
const int n = ;
int x;
int main(){
freopen("testdata.in","r",stdin);
clock_t st,ed;
st = clock();
for (int i = ;i < n;i++)
scanf("%d",&x);
ed = clock();
printf("%fseconds",(double)(ed-st)/CLOCKS_PER_SEC);
return ;
}

三号选手读入优化:


 #include<iostream>
#include<cstdio>
#include<ctime>
using namespace std;
const int n = ;
int x;
inline int read(){
int num = ;
char c;
bool flag = false;
while ((c = getchar()) == ' ' || c == '\n' || c == '\r');
if (c == '-') flag = true;
else
num = c - '';
while (isdigit(c = getchar()))
num = num * + c - '';
return (flag ? - : ) * num;
} int main(){
freopen("testdata.in","r",stdin);
clock_t st,ed;
st = clock();
for (int i = ;i < n;i++)
x = read();
ed = clock();
printf("%fseconds",(double)(ed-st)/CLOCKS_PER_SEC);
return ;
}


进行测试。结果如下表

在n = 100的数据量下,表现的都还不错,那么n = 10^4的时候将会如何呢?

虽然这样的时间差肉眼很难分辨,但是差距还是的确存在的。

读入优化占据上风,拿到了平均0.0128s的成绩。scanf也不甘示弱,平均读入时间有0.0374s。但cin就比较惨了,只有0.0688s。

很清楚的可以看出,三种读入方式已经开始有了差别。

那么在数据量较大的10^5,三种读入方式会有怎样的表现呢?

测试发现

至此,三种读入方式的速度差异已见分晓。

scanf平均0.384s,比读入优化的0.142s慢了一些。

cin这个时候已经gg了,0.7344s,如果是单点时限1s的题,光读入就会耗掉超过七成的时间。如果算法不够优,可能就会TLE。

即使数据量很大,读入优化也是还能保证到能在很短时间内读取大量数据,所以可以说是当之无愧的“黑科技”了。

今天比较晚了,本来还想简要提一下scanf和cin 的原理并且分析速度慢的原因的,看来只能放在以后了。

明天更新夏令营Day4知识点整理。

OI常用读入方式效率测试的更多相关文章

  1. 【转】Verilog HDL常用建模方式——《Verilog与数字ASIC设计基础》读书笔记(四)

    Verilog HDL常用建模方式——<Verilog与数字ASIC设计基础>读书笔记(四) Verilog HDL的基本功能之一是描述可综合的硬件逻辑电路.所谓综合(Synthesis) ...

  2. SoapUI 的几种常用参数化方式

    今天给大家来梳理下soapui这款工具关于参数化的几种方式以及具体的应用场景 1.properties 官方文档:https://www.soapui.org/docs/functional-test ...

  3. 5分钟白嫖我常用的免费效率软件/工具!效率300% up!

    Mac 免费效率软件/工具推荐 1. uTools(Windows/Mac) 还在为了翻译 English 而专门下载一个翻译软件吗? 还在为了格式某个 json 文本.时间戳转换而打开网址百度地址吗 ...

  4. NHibernate Demo 和 效率测试

    本文关于NHibernate的Demo和效率测试,希望对大家有用. 1.先去官网下载Nhibernate 2.放入到项目中并建立Helper类 private static ISession _Ses ...

  5. jQuery中ajax的4种常用请求方式

    jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数 ...

  6. iOS代码加密常用加密方式

    iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...

  7. DataGridView 中添加CheckBox和常用处理方式 .

    DataGridView 中添加CheckBox和常用处理方式 文章1 转载:http://blog.csdn.net/pinkey1987/article/details/5267934 DataG ...

  8. 关于 pgsql 数据库json几个函数用法的效率测试

    关于 pgsql 数据库json几个函数用法的效率测试 关于pgsql 几个操作符的效率测试比较1. json::->> 和 ->> 测试方法:单次运行100次,运行10个单次 ...

  9. python常用执行方式&变量&input函数

    linux系统中执行py文件方式:  ./a.py 需要执行权限 chmod -R 777(最大权限) 常用执行方式: 1. ./a.py2. python a.py 文件内部头加上 #!/usr/b ...

随机推荐

  1. webstorm中sftp远程调试配制

    sftp:secure file transfer protocol 文件安全传输协议 wb编辑代码,快速同步到远程 1.Tools -> Deployment -> Configurat ...

  2. 免费V P N获取方式

    给需要加速器链接国外网站的朋友, 打开网址:http://miaoaff.com/reg.php?id=204250: 用一个邮箱注册,就会得到一个免费的vpn软件账号(包含300M流量时间永久): ...

  3. POJ 1426 Find The Multiple(数论——中国同余定理)

    题目链接: http://poj.org/problem?id=1426 Description Given a positive integer n, write a program to find ...

  4. Spark算子--SortByKey

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/076a31e7caab1316b07990c02ac65e9c.html  SortByKey--Transf ...

  5. 一步一步从原理跟我学邮件收取及发送 5.C语言的socket示例

    说到 C 语言版本的程序,首先要解决的问题就是兼容性. 作为 20 年开发有 10 多年是在服务端的程序员,我深刻地感受到服务端平台的两极分化之严重,linux 派对 windows 那是超级的不屑一 ...

  6. 关于Vue的各个UI框架(elementUI、mint-ui、VUX)

    elementUI 官网:http://element.eleme.io/ 使用步骤: 1.安装完vue-cli后,再安装 element-ui 命令行:npm i element-ui -D 相当于 ...

  7. FORM ACTION=""

    FORM ACTION=""  如果什么都不写,就表示提交到当前页

  8. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  9. sql 时间转换问题 from_unixtime() UNIX_TIMESTAMP()

    http://blog.csdn.net/test_soy/article/details/50328367 from_unixtime()是MySQL里的时间函数 date为需要处理的参数(该参数是 ...

  10. Django_xadmin后台全局设置

    如何使用xadmin主题功能? 在ursersa app下的adminx.py文件下,注册一个基础设置类BaseSetting,并注册 import xadminfrom xadmin import ...