C++中的输入输出
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了
讨论完毕
C++中的输入输出的更多相关文章
- C/C++中的输入输出重定向
目录 一 C/C++中的输入输出重定向 1.1 C语言输入输出重定向 1.2 C++语言输入输出重定向 参考资料 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 C/C++中的输入输出重定向 ...
- 《算法竞赛入门经典》学习笔记 2.4.4 C++中的输入输出
2.4.3 64位整数输入输出long long除了cin,cout,也可以借助于printf和scanf语句,但对应的占位符缺是和平台与编译器相关的:在Linux中,gcc很同意的用%lld:在Wi ...
- shell中的输入输出和编程中的变量(shell 03)
shell中的输入输出标准输入:键盘标准输出:终端显示器>> 追加是换行追加的echo -n 不尾随换行符 -e 启用解释反斜杠的转义功能 -E 禁用解释反斜杠的转义功能(默认) --he ...
- Shell 环境中的输入输出重定向
Linux Shell 环境中的输入输出重定向,用符号<和>来表示.0.1和2分别表示标准输入.标准输出和标准错误. 1.重定向标准输出到文件: cat fo > foo.txt 2 ...
- java中的输入输出<1>
java中的输入输出基础(1) java中的IO支持通过java.io包下的类和接口来支持.在java.io包下主要包括输入.输出两种io流,每种输入.输出流又分为字节流和字符流. 字节流就是以字节为 ...
- ca78a_c++_字符串流在内存中的输入输出(速度快)
/*ca78a_c++_字符串流在内存中的输入输出**字符串流:在内存中的输入输出.(在内存中进行,速度快)**文件流 :是对文件进行输入和输出.(在磁盘里面进行)istringstream(输入), ...
- c++中处理输入输出的方法
============ 怎么处理一行空格中的逗号, ,,, ,,, ,,, c,c,d,d 使用c++的方法,可以这么处理: #include <sstream> #include< ...
- python 中文件输入输出及os模块对文件系统的操作
整理了一下python 中文件的输入输出及主要介绍一些os模块中对文件系统的操作. 文件输入输出 1.内建函数open(file_name,文件打开模式,通用换行符支持),打开文件返回文件对象. 2. ...
- java中的输入输出方法
输入 import java.util.Scanner; public class EnterTest { public static void main(String[] args) { //主方法 ...
随机推荐
- LinuX操作系统基础------>了解文件结构和相关的文件操作
了解LinuX文件系统 熟悉LinuX的文件结构 熟悉LinuX的基本操作指令 利用所学指令进行指令组合操作 什么是文件?什么是目录? 文件:一般是一个独立的东西,可以通过某些工具将其打开 目录:可以 ...
- 曲线生成与求交—B样条曲线
B样条曲线生成 Bezier曲线缺点:改变任一控制点的位置,将影响整条曲线的形状. B样条曲线是对Bezier曲线的改进,可进行局部控制,生成的曲线与控制多边形的外形更接近,将Bezier曲线作为一特 ...
- FPN和他的子孙们
FPN 方框里表示top down里每层有两个卷积操作 PAN:添加一个 bottom up线 NAS-FPN:基于搜索结构的FPN Fully-conencted FPN:全连接的FPN Si ...
- CSS动画实例:图文切换
先准备好一张图片,在页面中放置一个类名为container的层作为图文容器,在该层中再定义两个层:一个类名为image-box的层放置图片,一个类名为text-desc的层放置文本描述,HTML代码描 ...
- C# ASP 动态添加Html Table行
用JS放法实现以下效果: 前端文件Questionnaire23.aspx: <%@ Page Title="题目" Language="C#" Mast ...
- 浏览器编年史与UserAgent大乱斗
1993 世界上第一个支持显示图片的浏览器Mosaic诞生 为了区分浏览器是否能显示图片,UserAgent诞生了,Mosaic将自己标志为NCSA_Mosaic/2.0(windows 3.1) 1 ...
- 2020-06-20:一句话总结ZK?
福哥答案2020-06-20: 这道题价值不大,但是面试题里有这道题. 分布式协调服务,注册服务和发现,树形结构,监听机制,过半机制. ZooKeeper是源代码开放的分布式协调服务,由雅虎公司创建, ...
- Android开发学习进程0.18 SharePreference的使用 AIDL
SharePreference SharePreference是一种持久化存储手段,使用场景很多,如第一次打开时加载的用户协议等.适合小数据单进程的应用.将数据以键值对的形式存储在XML中. 使用方式 ...
- 你真的会做 2 Sum 吗?| 含双重好礼
小预告:文末有两份福利,记得看到最后哦- 2 Sum 这题是 Leetcode 的第一题,相信大部分小伙伴都听过的吧. 作为一道标着 Easy 难度的题,它真的这么简单吗? 我在之前的刷题视频里说过, ...
- 对java程序员来说时间格式永远让人挠头来看Java Date Time 教程-时间测量
在Java中,用System.currentTimeMillis()来测量时间最方便. 你要做的是在某些操作之前获取到时间,然后在这些操作之后你想要测量时间,算出时间差.下面是一个例子: long s ...