自己封装的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. C. 无穷的小数

    单点时限: 1.0 sec 内存限制: 512 MB 在十进制下,我们能够很轻易地判断一个小数的位数是有穷的或无穷的,但是把这个小数用二进制表示出的情况下其有穷性和无穷性就会发生改变,比如 十进制下的 ...

  2. A - Number Sequence 哈希算法(例题)

    Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 <= M ...

  3. winfrom 基础

    1 winfrom就是一种窗体开发端应用程序 2 窗体分类 1)记事本类:可以最大最小化,可以拖拽                                                窗体默 ...

  4. BUUOJ [极客大挑战 2019]Secret File

    [极客大挑战 2019]Secret File 0X01考点 php的file伪协议读取文件 ?file=php://filter/convert.base64-encode/resource= 0X ...

  5. Django文档阅读-Day2

    Django文档阅读 - Day2 Writing your first Django app, part 1 You can tell Django is installed and which v ...

  6. HTML+CSS教程(一)简介及其基本标签的使用方法

    一.前端 HTML(结构):HyPer TEXT Markup LanguageCSS(样式): 样式就是对于结构的一种美化JavaScript(js: 行为/ 提供了用户和界面的交互方式)jQuer ...

  7. vue中解决时间在ios上显示NAN的问题

    最近在用vue,遇到倒计时在ios上显示为NAN的问题. 因为做的是倒计时支付,思路是获取服务器时间和下单时间,再转成秒级时间戳做差值. 在网上找到说是ios 不支持例如2018-09-01 10:0 ...

  8. php的一个有意思的命令:-S

    php -S localhost:8188 /web 会启动一个监控IP:PORT 的http服务,算是简易的web服务器吧.基本上,实现了PHP+MySQL就可以建立一个简易测试网站的环境.

  9. share sdk

    新浪微博                 http://open.weibo.com 腾讯微博                 http://dev.t.qq.com QQ空间             ...

  10. Navicat premium15安装破解教程

    Navicat premium15安装破解教程 注意:安装之前请卸载干净navicat,不要覆盖安装 1.去官网下载Navicat premium15的安装包 官网地址:https://www.nav ...