自己封装的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. 【题解】P4570 [BJWC2011]元素 - 线性基 - 贪心

    P4570 [BJWC2011]元素 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 给你 \(n\) 个二元组 \( ...

  2. leetcode-0617 合并二叉树

    题目地址https://leetcode-cn.com/problems/merge-two-binary-trees/ 1.递归解法 递归的话我们首先需要递归的终止条件,对于本题而言,递归的终止条件 ...

  3. JavaScript之预编译

    javascript是一种解释性弱类型语言,在浏览器中执行时,浏览器会先预览某段代码进行语法分析,检查语法的正确与否,然后再进行预编译,到最后才会从上往下一句一句开始执行这段代码,简单得来说可以表示为 ...

  4. Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践

    Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践 本篇博文主要提供一个在 SpringBoot 中自定义 kafka配置的实践,想象这样一个场景:你的系统 ...

  5. jQuery的attr和prop属性

    <div id="div1"></div> attr: 首先是一个参数的attr. $("#div").attr("id&qu ...

  6. Python机器学习笔记:K-Means算法,DBSCAN算法

    K-Means算法 K-Means 算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛.K-Means 算法有大量的变体,本文就从最传统的K-Means算法学起,在其基础上学习 ...

  7. Tidyverse|数据列的分分合合,爱恨情仇

    Tidyverse|数据列的分分合合,爱恨情仇 本文首发于“生信补给站”Tidyverse|数据列的分分合合,一分多,多合一 TCGA数据挖掘可做很多分析,前期数据“清洗”费时费力但很需要. 比如基因 ...

  8. GOLANG 闭包和普通函数的区别

    闭包和匿名函数是一回事 闭包使用完毕之后不会自动释放,值依然存在 普通函数调用完毕后,值会自动释放

  9. Docker安装yapi

    安装docker 1.安装依赖包: yum install -y yum-utils device-mapper-persistent-data lvm2 2.安装 Yum -y install do ...

  10. Spring5参考指南: BeanWrapper和PropertyEditor

    文章目录 BeanWrapper PropertyEditor BeanWrapper 通常来说一个Bean包含一个默认的无参构造函数,和属性的get,set方法. org.springframewo ...