快读&快写模板【附O2优化】
快读&快写模板
快读快写,顾名思义,就是提升输入和输出的速度。在这里简单介绍一下几种输入输出的优劣。
C++ cin/cout 输入输出:优点是读入的时候不用管数据类型,也就是说不用背scanf/printf的%d、%c、%lld等繁琐的东西,但是缺点就是比scanf/printf慢一些。
C scanf/printf 输入输出:与C++对比,比cin/cout快一些,但使用方法细节比较多,容易出锅。
快读/快写:只能处理整数读入/输出,但是要比标准输入输出函数都快得多。
一般来讲,快读快写在针对数据量不是很大的输入输出的时候显得比较无力,但如果是多组数据或者输入量较多,就可以显著提升效率。
开不开inline差不多。
还有一种更快的fread()函数型快读,比一般的快读都要快,但是模板不太好理解,所以不加介绍。
快读模板及实现原理
快读是在字符读入的基础上进行效率优化的,其实现原理也很简单,看代码就可以理解了。x变量记录大小,f变量判断正负。
模板代码:
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
x=x*10+ch-'0',ch=getchar();
return x*f;
}
(注:本人无压行习惯,所以造成行数比较多,实际使用的时候可以把它压缩,比较好调)
优化快读模板
机房大佬说这是快读的另一套模板,但是本蒟蒻以为这是同一种模板,只不过这个模板在读入速度上进行了优化而已。在原来的模板字符读入的基础上进行了提速。嗖嗖快。
代码:
char *p1,*p2,buf[100000];
#define nc() (p1==p2 && (p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
int read()
{
int x=0,f=1;
char ch=nc();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=nc();
}
while(ch>='0'&&ch<='9')
x=x*10+ch-'0',ch=nc();
return x*f;
}
快写模板及实现原理
快写其实也是在字符输出(普遍认为字符输出比标准输出流快)的基础上进行按位分解,递归输出的。其基本原理还是先判正负再分解输出的。
模板代码:
void write(int x)
{
if(x<0)
putchar('-'),x=-x;
if(x>9)
write(x/10);
putchar(x%10-'0');
return;
}
附:O2优化
我们不用管O2优化的原理,只需要记住这个优化能使得程序的效率大大提高(我Jio得到底能提多少还是得看RP)。
手动打开O2开关:
#pragma GCC optimize(2)
快读&快写模板【附O2优化】的更多相关文章
- P1908 逆序对——树状数组&离散化&快读快写の学习
题目简述: 对于给定的一段正整数序列,逆序对就是序列中 a_i>a_jai>aj 且 i<ji<j 的有序对. 输出序列中逆序对的数目. 知识补充: 树状数组: 这东西就是 ...
- 卡常三连(快读快写+re)
快读: inline int in() { char ch; ; '))); a*=;a+=ch-'; ,a+=ch-'; return a; } 快写: inline void out(int a) ...
- c++ 快读快输模板
快读 inline int read() { ; ; char ch=getchar(); ; ch=getchar();} )+(X<<)+ch-'; ch=getchar();} if ...
- C++笔记——快读快写
直接开始吧 额m~,这里就没什么好说的了,无非就是用getchar加快cin或printf的读入速度. 代码: inline int read() { int X=0; bool flag = 1; ...
- C++ 快读快写
inline int read() { int s=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; c ...
- C++中的快读和快写
快读原理 单个字符的读入速度要比读入数字快,因此我们以字符的形式先读入,然后处理计算转为数字. 代码 inline int read(){ register int x = 0, t = 1; reg ...
- C++ 加速(卡常)技巧【超级 快读、快写】
C++ \texttt{C++} C++ 加速技巧 快读快写 快读 inline int read() { int x = 0, w = 0; char ch = 0; while (!isdigit ...
- C++快读模板
C++的快速读入模板 inline int read() { ; char ch = getchar(); ') { if (ch == '-') flag = true; ch = getchar( ...
- 快读模板 + #define 压缩for
快读是一个很重要的模板 #define 压缩for是为了代码的简洁 这里贴一下模板 #define f(i , a , b) for(int i=(a) ; i <= (b) ; i++) us ...
随机推荐
- 【Excel】删除重复值
- React中引用CSS样式的方法
相对于html中引用css的三种方法,react中也有三种方法,一一相对: 1. 行内样式:直接在组件内部定义 <div style={{width:'20px',height:'30px'}} ...
- React: React组件创建的三种方式
一.简介 在前面介绍的React组件知识中,对于组件的创建我只是用了其中某一种方式.其实,在2013年React诞生之初,对于React组件的创建,仅仅只有一种方式,也即createClass函数,在 ...
- php 截取字符串 strstr 和strrchr
截取字符串 strstr 和strrchr 结果:(其中之一) strstr : 执行时间在0.10 - 0.19 之间 strrchr : 执行时间在0.095 - 0.19 之间 结论:从数十次执 ...
- HTML5之图片转base64编码
之前在群里看到很多小哥哥小姐姐讨论关于图片base64互转的方法,刚好我之前用到的一个方法给大家分享一下. <!Doctype html><html> <head> ...
- MySQL基础之Natural Join用法
Natural join即自然连接,natural join等同于inner join或inner using,其作用是将两个表中具有相同名称的列进行匹配 用https://www.w3resourc ...
- Laravel配置全局公共函数
在Laravel项目中我们常常需要定义一些全局的公共函数,通常我们会将这些公共函数定义在一个单独的文件里,如helpers.php中.我们在app目录下创建一个名为helpers.php的文件(app ...
- 【linux】切换到root用户,并重置root用户密码
1.切换当前用户 到 root用户 sudo -i 2.重置root用户密码 sudo passwd root
- node.js如何批量赋值
1. 数组解析赋值 let a = 1; let b = 2; let c = 3; 等同于 let [a, b, c] = [1, 2, 3]; 默认值 let [a, b = "B&qu ...
- 从程序集加载类型,遇到 ReflectionTypeLoadException 的处理办法
处理办法 catch ReflectionTypeLoadException ,然后从里面读取 Types 数据(成功加载的类型)就可以了. 参考 ReflectionTypeLoadExceptio ...