常见输入输出
最常见的输入输出无非就是cin
cout
和scanf()
printf()
两种,使用方法也比较简单。
cin&cout优化
由于scanf()
printf()
本身就比cin
cout
快几个数量级,所以就没什么可优化的。
但在使用cin
cout
时可以关掉同步来进行加速:
int main(){
ios::sync_with_stdio(false);//在主函数里加上这么一句
cin >> x;//后面该咋用咋用
cout >> x;
return 0;
}
(虽然关了同步它也没scanf()
printf()
快,但它好写啊!)
正文开始——快读&快写
在比赛里,当数据的规模大于1e5的数量级时,使用scanf()
printf()
效率就会比较低,
此时,快读快写的优势就十分明显了,它比scanf()
printf()
快一个常数级左右
快读
#include <bits/stdc++.h>
using namespace std;
inline int read(){//inline是内联函数,可以稍微加快一点速度(写不写均可)
int x = 0, f = 1;//x是我们最终要返回的变量里的值,f用来表示正负(1为正,-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;//当f = -1是返回值就会变成与输入值相同的负数
}
int main(){
int x = read();//使用方法
return 0;
}
快写
#include <bits/stdc++.h>
using namespace std;
inline void write(int x){
if(x < 0){//是负数提前输出负号
putchar('-');//字符输出
x = -x;//转成正数处理
}
if(x > 9){//不是一位数
write(x / 10);//递归——直到最高位
}
putchar(x % 10 + '0');//转成字符输出
}
int main(){
int x = 0;
write(x);//使用方法
return 0;
}
结语
快读快写在大数据面前优势才明显,小数据面前标准输入输出与它相差无几,注意使用场景才能事半功倍(练板子除外)
祝AKIOI