C++ 流家族·终极三大类

📅 发布时间:2026/7/11 11:04:36 👁️ 浏览次数:
C++ 流家族·终极三大类
C 流家族·终极三大类分类核心前缀数据目的地/来源典型代表类主要用途1. 标准流(控制台)无特殊前缀(全局对象)键盘 / 屏幕(标准输入输出设备)cin(istream)cout(ostream)cerr(ostream)clog(ostream)程序与用户直接交互。读键盘、打印日志、报错。2. 文件流(硬盘)fFile硬盘文件(.txt, .bin, .jpg 等)ifstream(只读)ofstream(只写)fstream(读写)持久化存储数据。读取配置、保存存档、写日志文件。3. 字符串流(内存)sString内存字符串(std::string变量)istringstream(只读)ostringstream(只写)stringstream(读写)在内存中格式化或解析数据。字符串转数字、拼接复杂文本、模拟文件操作。 第一类标准流 (Standard Streams)头文件:#include iostream特点: 程序启动时自动创建无需打开/关闭直接连接控制台黑框框。对象名类型方向特点cinistream输入 ⬅️标准输入通常是键盘。跳过空格读取。coutostream输出 ➡️标准输出通常是屏幕。有缓冲效率高。cerrostream输出 ➡️标准错误。无缓冲立即显示用于报错。clogostream输出 ➡️标准日志。有缓冲用于记录一般日志信息。代码示例:coutHello;// 输出到屏幕cinnum;// 从键盘读取cerrError!;// 立即报错 第二类文件流 (File Streams)头文件:#include fstream特点: 操作硬盘上的真实文件。必须指定文件名需要关心打开模式如ios::app,ios::binary用完后必须close()。类名全称方向默认行为典型场景ifstreamInput File Stream输入 ⬅️只读读取配置文件、加载游戏地图。ofstreamOutput File Stream输出 ➡️只写 (默认清空文件)保存玩家进度、导出 CSV 数据。fstreamFile Stream双向 ↔️需手动指定in或out修改二进制文件中间的数据、数据库操作。关键点: 只有这一类流需要使用你之前问的ios::app(追加),ios::trunc(截断),ios::binary(二进制)等模式。代码示例:ofstreamout(log.txt,ios::app);// 以追加模式打开文件outNew Log Entry;// 写入文件out.close();// 必须关闭 第三类字符串流 (String Streams)头文件:#include sstream特点: 操作内存中的std::string。不需要打开模式没有app/trunc因为它不会丢失数据。它把字符串当成“虚拟文件”来处理利用流的强大格式化功能。类名全称方向核心功能典型场景istringstreamInput String Stream输入 ⬅️解析把100 200这种字符串拆解成两个整数。ostringstreamOutput String Stream输出 ➡️拼接/格式化把int,double,string拼成一个格式化好的长字符串。stringstreamString Stream双向 ↔️反复处理先写入数据再倒回去读取或者多次修改同一字符串。关键点:想获取最终结果调用.str()方法。想清空重来调用.str()。没有open()函数构造函数直接传字符串。代码示例:ostringstream oss;ossID: 123, Name: Alice;// 像写文件一样写内存string resultoss.str();// 取出结果ID: 123, Name: Alice 进阶还有其他的流吗除了这三大类C 标准库还有一些特殊用途的流但它们通常也是基于上述三类扩展的内存流 (std::strstream):老旧版本的字符串流C98 之前使用固定大小的字符数组而不是std::string。现状:已废弃不要用请用stringstream代替。同步流 (std::syncstream)(C20 新特性):用于多线程环境下保证输出内容不会被其他线程打断原子操作。场景: 多个线程同时往cout或文件写日志时防止文字乱序交错。自定义流buf (std::streambuf):这是所有流的底层缓冲区。高级用法: 如果你想让cout输出到网络 socket或者输出到一个加密的内存块你需要继承streambuf类来自定义数据的去向。⚡ 一张图总结记忆法看到名字里的字母直接对应功能看到f→ \rightarrow→File→ \rightarrow→硬盘→ \rightarrow→要想想打开模式(app,trunc)。看到s→ \rightarrow→String→ \rightarrow→内存→ \rightarrow→用来解析/拼接字符串 (.str())。看到cin/cout→ \rightarrow→Console→ \rightarrow→屏幕/键盘→ \rightarrow→直接用。看到i→ \rightarrow→Input→ \rightarrow→读()。看到o→ \rightarrow→Output→ \rightarrow→写()。这就是 C 流的全部家底掌握了这三大类99% 的输入输出需求都能搞定。