快读快写简介
快读快写,顾名思义,就是提升输入和输出的速度。在这里简单介绍一下几种输入输出的优劣。
- C++
cin / cout
输入输出:优点是读入的时候不用管数据类型,但是缺点就是比scanf/printf慢一些。
这里给一个关同步流的代码,可以显著优化 cin / cout
的速度:
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
需要注意的是,关了同步流之后就不能再用 scanf / printf
了。
-
C
scanf / printf
输入输出:与 C++ 对比,比cin / cout
快一些,但使用方法细节比较多,容易出锅。 -
快读/快写:只能处理整数读入 / 输出,但是要比标准输入输出函数都快得多。
-
一般来讲,快读快写在针对数据量不是很大的输入输出的时候显得比较无力,但如果是多组数据或者输入量较多,就可以显著提升效率。
-
开不开inline差不多。
-
还有一种更快的fread()函数型快读,比一般的快读都要快,这里主要给这种。
-
快读快写代码
char *p1, *p2, buf[N];
#define nc() (p1 == p2 && (p2 = (p1 = buf) +\
fread(buf, 1, N, stdin), p1 == p2) ? EOF : *p1 ++ )
LL read()
{
LL x = 0, f = 1;
char ch = nc();
while (ch < 48 || ch > 57)
{
if (ch == '-') f = -1;
ch = nc();
}
while (ch >= 48 && ch <= 57)
x = (x << 3) + (x << 1) + (ch ^ 48), ch = nc()