自己封装的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. 最新超详细VMware虚拟机安装完整教程

    一.基础介绍 VMWare虚拟机软件是一个“虚拟PC”软件,它使你可以在一台机器上同时运行二个或更多Windows.DOS.LINUX系统.与“多启动”系统相比,VMWare采用了完全不同的概念.多启 ...

  2. SQLi —— 逗号,空格,字段名过滤突破

    前言 出于上海大学生网络安全大赛的一道easysql,促使我积累这篇文章.因为放了大部分时间在Decade和Babyt5上,easysql一点没看,事后看了WP,发现看不懂怎么回事,于是了解了一番. ...

  3. [YII2] 视图层过滤客户恶意代码

    两种方式: 一种是吧html的恶意标签转译:(注意的就是命名空间) <?php use yii\helpers\Html; ?> <h1><?=Html::encode( ...

  4. 磁盘性能测试工具之fio

    fio是测试磁盘性能的一个非常好的工具,用来对硬件进行压力测试和验证. 注意事项 CentOS 6.5等较老版本的操作系统用fdisk创建分区时,默认为非4KB对齐选择初始磁柱编号,对性能有较大的影响 ...

  5. 还学的动吗? 盘点下Vue.js 3.0.0 那些让人激动的功能

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://blog.bitsrc.io/vuejs-3-0-0-beta-features- ...

  6. Java Web教程——检视阅读

    Java Web教程--检视阅读 参考 java web入门--概念理解.名词解释 Java Web 教程--w3school 蓝本 JavaWeb学习总结(一)--JavaWeb开发入门 小猴子mo ...

  7. Python 替换文本中的某些词语

    https://stackoverflow.com/questions/39086/search-and-replace-a-line-in-a-file-in-python from tempfil ...

  8. Zabbix3.0安装部署最佳实践

    Zabbix介绍 1.1zabbix 简介 Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收 ...

  9. NPM 私有仓库的搭建

    NPM 私有仓库的搭建 为什么搭建私有仓库 balabala,当然是有需求的时候嘛 搭建流程 介绍和安装verdaccio 备注: 程序启动后,配置文件为/home/work/.config/verd ...

  10. Python带你做个愉快的"动森"玩家! (超简单代码)

    最近Switch上的<动物森友会>可谓是炙手可热,它几乎算是任天堂版的<模拟人生>了,它的最新游戏<集合啦!动物森友会>(以下称“动森”)在发售后,取得了不错的媒体 ...