跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ 快速输入输出优化:快读与快写实现

C++ 中快速输入输出的多种实现方案。涵盖基于 getchar/putchar 的基础版、利用 fread/fwrite 的缓冲区优化版、针对长整型和字符串的特化版本,以及采用命名空间封装的终极竞赛版。通过性能对比分析,指出基础版相比标准库函数有显著速度提升,适用于算法竞赛等对 I/O 效率要求较高的场景。

晚风告白发布于 2026/3/27更新于 2026/10/20114 浏览

1. 基于 getchar/putchar 的快读快写(最常用)

  • 整数快读(支持负数)
inline int read(){int x = 0, f = 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;}
  • 无符号整数快读(更快)
inline unsigned int read(){unsigned int x = 0;char ch = getchar();while(ch < '0'|| ch > '9') ch = getchar();while(ch >= '0'&& ch <= '9'){ x = x * 10+(ch - '0'); ch = getchar();}return x;}
  • 整数快写(支持负数)
inline void write(int x){if(x < 0){putchar('-'); x = -x;}if(x > 9)write(x / 10);putchar(x % 10+'0');}

2. 基于缓冲区优化的快读(更快)

  • 使用静态缓冲区的快读
char buf[1<<21],*p1 = buf,*p2 = buf;
inline char getc(){return p1 == p2 &&(p2 =(p1 = buf)+fread(buf,1,1<<21,stdin), p1 == p2)?EOF:*p1++;}
inline int read(){int x = 0, f = 1;char ch = getc();while(ch < '0'|| ch > '9'){if(ch == '-') f = -1; ch = getc();}while(ch >= '0'&& ch <= '9'){ x = x * 10+(ch - '0'); ch = getc();}return x * f;}
  • 使用缓冲区的快写
char pbuf[1<<21],*pp = pbuf;
inline void push(const char& c){if(pp - pbuf ==(1<<21)){fwrite(pbuf,1,(1<<21),stdout); pp = pbuf;}
*pp++= c;}
inline void write(int x){static int sta[35];int top = 0;if(x < 0){push('-'); x = -x;}
do{ sta[top++]= x % 10; x /= 10;}while(x);
while(top)push(sta[--top]+'0');push('\n');// 可以根据需要修改}// 程序结束时调用 flush() 确保所有输出被写入
inline void flush(){fwrite(pbuf,1, pp - pbuf,stdout); pp = pbuf;}

3. 针对不同数据类型的优化实现

  • 读取长整型
inline long long readll(){long long x = 0, f = 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;}
  • 读取字符串(一行)
inline void readstr(char* str){char ch = getchar();while(ch == ' '|| ch == '\n') ch = getchar();while(ch != ' '&& ch != '\n'&& ch != EOF){*str++= ch; ch = getchar();}
*str ='\0';}

4. 终极优化版本(竞赛常用)

namespace FastIO {
const int SZ = 1 << 20;
char inbuf[SZ], outbuf[SZ];
int in_left = 0, in_right = 0;
int out_right = 0;
inline void load(){int len = fread(inbuf,1, SZ,stdin); in_left = 0; in_right = len;}
inline char getchar(){if(in_left >= in_right)load();if(in_left >= in_right)return EOF;return inbuf[in_left++];}
inline int read(){int x = 0, f = 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;}
inline void flush(){fwrite(outbuf,1, out_right,stdout); out_right = 0;}
inline void putchar(char ch){ outbuf[out_right++]= ch;if(out_right == SZ)flush();}
inline void write(int x){if(x < 0){putchar('-'); x = -x;}if(x > 9)write(x / 10);putchar(x % 10+'0');}
struct Flusher{~Flusher(){flush();}} flusher;}
using FastIO::read;
using FastIO::write;
using FastIO::putchar;
  • 使用示例
int main(){int n = read;// 读取一个整数
write(n);// 输出一个整数
putchar('\n');// 输出换行// 使用命名空间版本
int m = FastIO::read();
FastIO::write(m);
FastIO::putchar('\n');
return 0;// FastIO::Flusher 会在程序结束时自动调用 flush()}

性能比较

  1. 基础版 (getchar/putchar):比 scanf/printf 快约 2-3 倍
  2. 缓冲区版 (fread/fwrite):比基础版快约 2-3 倍
  3. 终极优化版:比缓冲区版再快约 1.5 倍

在大多数算法竞赛中,基础版或缓冲区版已经足够使用。终极优化版更适合输入数据量特别大的极端情况。

目录

  1. 1. 基于 getchar/putchar 的快读快写(最常用)
  2. 2. 基于缓冲区优化的快读(更快)
  3. 3. 针对不同数据类型的优化实现
  4. 4. 终极优化版本(竞赛常用)
  5. 性能比较

更多推荐文章

查看全部
  • OpenClaw 本地部署教程:环境配置、插件开发与常见问题
  • C++ 类与对象进阶:默认成员函数与操作符重载
  • 基于 Python+Vue 的养老院服务预订管理系统设计与实现
  • MCP 插件配置指南:browser-tools-mcp 示例
  • 基于 ChatGPT 学术版的智能学术写作全流程解决方案
  • StructBERT 零样本分类 WebUI 自定义开发指南
  • AI 大模型评测方法总结与案例分析
  • 从零搭建可落地 AI Agent:开发全流程与实战
  • Python 的 yield 关键字详解:生成器函数与惰性求值
  • 找回 Edge 边栏中消失的 Copilot 图标
  • Docker 部署 MySQL 8.0:从快速体验到生产环境配置
  • GitHub Actions 集成 PyTorch-CUDA-v2.6 镜像实现 CI/CD 自动化
  • Dify MCP Server 插件实战:将工作流发布为第三方服务
  • 响应式设计:让网页适配不同终端
  • 面试高频缓存算法:LRU 与 LFU 原理及 Java 实现
  • GLM-5 发布:开源模型新标杆,Agentic 能力与训练架构解析
  • 编写 ChatGPT 指令(Prompt)的万能模板及实用示例
  • AI 时代技术民主化:文科生为何成最大受益者
  • K-RagRec:基于知识图谱检索增强生成的 LLM 推荐系统
  • C++ 类和对象进阶:构造、析构与运算符重载

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online