自己封装的FastIO类,效率虽有所损失,不过实用性提高很多。

测试,写10000000个整数(86M):

  • printf 2.7s
  • cout 27s
  • FastIO 1s

测试,读10000000个整数(86M):

  • scanf 1.8s
  • cin 15s
  • FastIO 1s

       

利用c++的可变参数模板(c++11)和重载可以轻松实现数量不定的混合输入输出。

  1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
class FastIO {
public:
FastIO() {
pin = in;
countin = countout = ;
}
int read2mem() {
return countin = fread(in, , insize, stdin);
fclose(stdin);
}
int write2disk() {
return fwrite(out, , countout, stdout);
fclose(stdout);
}
int read() { return ; }
template<typename T, typename ...R>
int read(T &f, R &...r) {
if (get(f) == -) return -;
c = read(r...);
if (c == -) return -;
return + c;
}
void write() {
put('\n');
}
template<typename T, typename ...R>
void write(const T x, const R ...r) {
put(x);
write(r...);
}
private:
const static int insize = ( << ) * , outsize = ( << ) * ;
char in[insize], out[outsize], *pin;
int countin, countout, a[], c, negative; /*** read ***/
inline bool digit(const char ch) {
return ch == '-' || ch >= '0' && ch <= '9';
}
int get(char s[]) {
while ((*pin == ' ' || *pin == '\n') && pin - in != countin) pin ++;
if (pin - in == countin) return -;
while (*pin != ' ' && *pin != '\n' && pin - in != countin) *s ++ = *pin ++;
*s = ;
return ;
}
int get(char &ch) {
if (pin - in == countin) return -;
ch = *pin ++;
return ;
}
int get(int &buf) {
while (!digit(*pin) && pin - in != countin) pin ++;
if (pin - in == countin) return -;
buf = ;
negative = ;
if (*pin == '-') {
negative = ;
pin ++;
}
while (digit(*pin) && pin - in != countin) {
buf = buf * + *pin - '0';
pin ++;
}
if (negative) buf = -buf;
return ;
}
/*** write ***/
void put(unsigned int x) {
c = ;
a[c ++] = x % + '0';
x /= ;
while (x) {
a[c ++] = x % + '0';
x /= ;
}
while (c) {
out[countout ++] = a[-- c];
}
}
void put(int x) {
c = ;
negative = x < ;
if (negative) {
x = -x;
out[countout ++] = '-';
}
a[c ++] = x % + '0';
x /= ;
while (x) {
a[c ++] = x % + '0';
x /= ;
}
while (c) {
out[countout ++] = a[-- c];
}
}
void put(const char &ch) {
out[countout ++] = ch;
}
void put(char s[]) {
while (*s) out[countout ++] = *s ++;
}
};

[c++ IO加速]快速输入输出的更多相关文章

  1. C++快速输入输出优化

    在这里存一下我的快速输入输出优化 以及写题模板 这里的是$getchar$优化和$putchar$优化,$fread$和$fwrite$暂时咕咕咕 快速输入 这里$define$了一个$I\_int$ ...

  2. JAVA的一般输入输出 和 快速输入输出 (BufferedReader&BufferedWrite)(转载)

    1.JAVA的一般输入输出 和 快速输入输出 (BufferedReader&BufferedWrite) 摘要 本文主要介绍快速输入输出, 文中提到了几个IO类,这里推荐使用Buffered ...

  3. C++IO类&文件输入输出

    C++IO类&文件输入输出 istream(输入流)类型,提供输入操作. ostream(输出流)类型,提供输出操作. cin,一个istream对象,从标准输入读取数据. cout,一个os ...

  4. Fluid + GooseFS 助力云原生数据编排与加速快速落地

    前言 Fluid 作为基于 Kubernetes 开发的面向云原生存算分离场景下的数据调度和编排加速框架,已于近期完成了 v0.6.0 版本的正式发布.腾讯云容器 TKE 团队一直致力于参与 Flui ...

  5. JAVA基础复习与总结<七> File类_基本的IO概念_输入输出

    File类 1.操作目录  mkdir() 创建目录,必须确保父目录存在,如果不存在,创建失败 mkdirs() list() 文件:目录字符串形式 ,只返回目录和文件的名称 listFiles()  ...

  6. 八. 输入输出(IO)操作1.输入输出基本概念

    输入输出(I/O)是指程序与外部设备或其他计算机进行交互的操作.几乎所有的程序都具有输入与输出操作,如从键盘上读取数据,从本地或网络上的文件读取数据或写入数据等.通过输入和输出操作可以从外界接收信息, ...

  7. Java IO之简单输入输出

    Java中的IO分为两个部分,以InputStream和Reader为基类的输入类,以OutputStream和Writer为基类的输出类. 当中InputStream和OutputStream以字节 ...

  8. Java快速输入输出

    一.StreamTokenizer实现快速输入 需要的jar包 import java.io.BufferedReader;import java.io.IOException;import java ...

  9. CC2530通用IO口的输入输出

    一.引脚概述 CC2530有40 个引脚.其中,有21个数字I/O端口,其中P0和P1是8 位端口,P2仅有5位可以使用.P2端口的5个引脚中,有2个需要用作仿真,有2个需要用作晶振.所以可供我们使用 ...

随机推荐

  1. Python - 调用接口合并文件夹下多个Excel表

    在工作中经常遇到需要打开许多个excel表格,然后合并的需求,合并的同时要求格式必须原汁原味的保留.利用VBA代码可以比较轻松的解决,现在我们来看Python中如何实现. 上代码: from open ...

  2. 支付宝开源非侵入式 Android 自动化测试工具 Soloπ

    Soloπ(SoloPi)是支付宝开源的一个无线化.非侵入式的Android自动化测试工具,公测版拥有录制回放.性能测试.一机多控三项主要功能,能为测试开发人员节省宝贵时间. 本文是SoloPi团队关 ...

  3. 【认证与授权】2、基于session的认证方式

    这一篇将通过一个简单的web项目实现基于Session的认证授权方式,也是以往传统项目的做法. 先来复习一下流程 用户认证通过以后,在服务端生成用户相关的数据保存在当前会话(Session)中,发给客 ...

  4. 学习笔记-CTF密码相关

    RSA共模攻击 RSA基本原理 ①  选择两个大的质数p和q,N=pq: ②  根据欧拉函数,求得r=(p-1)(q-1): ③  选一个小于r的整数e,求得e关于模r的模反元素d: ④  将p和q的 ...

  5. 理解分布式一致性:Paxos协议之Multi-Paxos

    理解分布式一致性:Paxos协议之Multi-Paxos Multi-Paxos without failures Multi-Paxos when phase 1 can be skipped Mu ...

  6. 在IBM Cloud中运行Fabric

    文章目录 打包智能合约 创建IBM Cloud services 创建fabric网络 创建org和相应的节点 创建order org和相应节点 创建和加入channel 导入智能合约 上篇文章我们讲 ...

  7. 深拷贝、浅拷贝与Cloneable接口

    深拷贝与浅拷贝 浅拷贝 public class Student implements Cloneable{ Integer a; Integer b; @Override protected Obj ...

  8. html+css的用户注册界面

    注册界面样图 代码实现 html部分 <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  9. php private学习笔记

    类的权限修饰符,放在属性/方法的前面.用来说明属性/方法的权限特点. 三种权限修饰符 private  私有的 public   公共 protected  保护的 privata 的属性.方法只能在 ...

  10. jQuery学习(二)

    操作DOM对象: 修改文本: jQuery对象的text()和html()方法可以用来获取节点的文本内容和HTML文本.而当你给方法传入参数时,这两个方法可以被用于设置jQuery的文本内容. 还是以 ...