update&fixed:

经过实测,io解绑在各大oj以及本地评测软件上都劣于scanf

所以在大数据的情况下还是推荐尽量使用scanf! ! ! !

众所周知,C++自带了各种输入方式

比如cin,应该是许多人第一个接触的输入方式。

然而,总有些数据极大的毒瘤题,甚至必须加快读入读出才能保证勉强不超时。

所以,咱就来研究一下各种读入与输出的效率。

本次测试仅仅针对int类型数据


输入

首先是最常见的,cin与scanf。

在很久以前,老师就告诉过我们,scanf比cin快。

40w数据量下的测试结果(windows环境下)也是这样说的:

scanf:99.5028ms

cin : 211.197ms

cin是scanf两倍多......(老师说的果然没错

但是

你想过没有,有一天,cin可能scanf快?

上网查询的结果:C++中cin要与scanf同步(即能够同时正常使用),捆绑了输入输出流,牺牲亿一点点cin的效率。而单从实现原理上看,cin应该是要大于scanf的。

可以大致理解为cincout时又用scanfprintf整了一遍

所以,给cin/cout解绑,可以使其更快。

但是此时的代码里不能有scanf,不然会乱码

所以不推荐广泛使用

解绑代码如下:

	ios::sync_with_stdio(0);//初步释放
cin.tie(0);//解绑输入流
cout.tie(0);//解绑输出流

之后再来测试一下时间:

cin(解绑后) : 44.5467ms

甚至快于scanf!(多次测试结果一样,不展示了)

输出

这里直接上数据了。

为了增大差距加了400w数据

cout :646.71ms

cout(解绑) : 534.531ms

printf: 498.898ms

(由于是直接打印"0"这个字符所以要快一点)


以上就是c++自带的输入输出了。

然而我们还能手写快读快写,由于是对字符进行操作,效率不低。

而且常数小

/*快速读入函数*/
inline int read()
{
int s=0,w=1;
char ch=getchar();//getchar()速度>scanf
while(ch<'0'||ch>'9')
{
if(ch=='-')w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
return s*w;
}
/*快速输出*/
inline void out(int x)
{
if(x>9)
out(x/10);
putchar(x%10+'0');
}

测试结果:

快读(40w数据): 10.1961ms

快写(400w数据):7.5677ms

没什么好说的,令人发指的快。

缺点也显而易见 : 难写 (懒

而且,当数据间有多个空格隔开时,快读会被卡,这时候就不如cin了

讨论完毕

最新文章

  1. 应用Web.Config配置网站
  2. 编译PHP5缺t1lib包安装
  3. PULL解析XML的运行机制详解
  4. (转)AVI文件格式解析+AVI文件解析工具
  5. Linux下smokeping网络监控环境部署记录
  6. 01.Box2dWeb入门教程
  7. openstack context
  8. trap在shell中捕捉信号
  9. wp-content-index文章目录插件使用效果调整
  10. Oracle 性能优化 — 统计数据收集[Z]
  11. Creating Spatial Indexes(mysql 创建空间索引 The used table type doesn&#39;t support SPATIAL indexes)
  12. NSIS:简单按钮美化插件SkinButton,支持透明PNG图片。
  13. 对float的理解
  14. MySQL性能优化总结___本文乃《MySQL性能调优与架构设计》读书笔记!
  15. struts2_HelloWorld
  16. 设计模式——适配器模式(type-c转3.5mm耳机口)
  17. 20145127《java程序设计》第九周学习总结
  18. 软工1816 &#183; 作业(八)项目UML设计
  19. 使用TopShelf做windows服务
  20. Cisco Packet Tracer中两台电脑通信设置

热门文章

  1. 高效c/c++日志工具zlog使用介绍
  2. QComboBox设置下拉item大小
  3. MySQL8.0.20安装配置+用Navicat连接详细教程(win10,Navicat15)
  4. Linux学习笔记之如何在图形界面旁边把终端添加显示出来
  5. 【计算机算法设计与分析】——SVM
  6. 谁来教我渗透测试——黑客必须掌握的HTML基础(二)
  7. 没有Qt Quick UI,没有 Qt Quick Project
  8. 【算法•日更•第二十七期】基础python
  9. JavaScript学习系列博客_29_JavaScript arguments
  10. Docker 最常用的镜像命令和容器命令