第 8 章 IO库

标签: C++Primer 学习记录 IO库



8.1 IO类

  1. IO对象无拷贝或赋值,因此不能将形参或返回类型设置为流类型,进行 IO操作的函数通常以引用方式传递和返回流。又因为读写一个流会改变其状态,所以不能是 const引用!
  2. IO操作因为需要频繁地与外部设备进行数据传递,很容易出错。IO库中设置了一些函数和标志来操纵流的条件状态。
  • badbit,不可恢复的错误
  • failbit,可恢复的错误
  • 到达文件结束位置,eofbit和 failbit都会被置位。
  1. 由于设备的写操作可能很耗时,所以操作系统会将多个输出操作合为单一的系统级写操作,即缓冲机制。
  2. 导致缓冲刷新的原因有很多:
  • 程序正常结束,作为 main函数的 return操作的一部分,缓冲刷新被执行。

  • 缓冲区满时,需要刷新缓冲,而后新的数据才能继续写入缓冲区。

  • 操纵符显式刷新。

    • endl,完成换行并刷新缓冲区
    • flush,刷新缓冲区,但不输出任何额外的字符
    • ends,插入一个空字符,然后刷新缓冲区
  • 使用 unitbuf设置流的内部状态,告诉流在接下来的每次操作之后都进行一次 flush操作,而 nounitbuf则重置流,使其恢复正常的系统管理的缓冲区刷新机制。

    cout << unitbuf;    // 所有输出操作后都会立即刷新缓冲区
    cout << nounitbuf; // 回到正常的缓冲方式
  • 关联输入和输出流。标准库中, 是将 cin关联到 cout上的,任何试图从输入流读取数据的操作都会先刷新关联的输出流。对于交互式系统,这意味着用户提示信息会在读操作之前被打印出来。


8.2 文件输入输出

  1. 在操作文件流对象之前,进行 open是否成功的检测通常是一个好习惯。

    // 检测 open是否成功
    if (out) {
    }
  2. 读入和写出的文件,默认是与 cpp/h代码文件在同一路径下的。

  3. 当一个 fstream对象离开其作用域时, close会被自动调用,与之关联的文件会自动关闭。

  4. 未指定文件模式时, ifstream默认以 in模式打开,ofstream默认以 out模式打开,fstream默认以 in和 out模式打开。

  5. 默认情况下,以 out模式打开文件,就同时也意味着 trunc模式,已有数据会被截断。如果要保存已有数据,需要在打开文件时同时指定 app模式(定位到文件末尾)。


8.1 string流

  1. 当我们的某些工作是对整行文本进行处理,而其他一些工作是处理行内的单词时,通常可以使用 istringstream。同样的,而当需要频繁地文件输出操作或在输出字符串前还要进行某些操作时,可以先将输出内容写入到一个 ostringstream中,然后一次性输出。
  2. stringstream流就是一个string流的缓冲机制,有点类似于 vector<string>,只是 stringstream流本身是一个流,支持流的输入和输出操作。

第 8 章 IO库的更多相关文章

  1. 《C++ Primer》笔记 第8章 IO库

    iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型. 标准库使我们能忽略这些不同类型的流之间的差异,这是通过继承机制 ...

  2. 【c++ Prime 学习笔记】第8章 IO库

    C++语言不直接处理输入输出,而是通过标准库中的一组类来处理IO 1.2节介绍的IO库: istream(输入流)类型,提供输入 ostream(输出流)类型,提供输出 cin,是istream对象, ...

  3. 《C++primer》v5 第8章 IO库 读书笔记 习题答案

    8.1.8.2 这一章不咋会啊.. istream &read(istream &is) { int a; auto old_state=is.rdstate(); is.clear( ...

  4. C++ Primer 5th 第8章 IO库

    IO类对象不允许进行拷贝操作. IO类中定义后一些函数和标志,可以用于访问和操作流的状态. 一旦流发生错误,后续IO操作都是失败的. 读写IO对象会改变IO对象的状态. 每个输出流都管理一个缓冲区. ...

  5. [C++ Primer] 第8章: IO库

    IO类 iostream定义了读写流的基本类型 istream, wistream 从流读取数据 ostream, wostream 向流写入数据 iostream, wiostream 读写流 fs ...

  6. 学习 primer 第8章 IO库 小结

    iostream处理控制台IO fstream处理命名文件IO stringstream完成内存string的IO 非常重要!!!!!!!!!!  ========================== ...

  7. 第8章 IO库 自我综合练习

    要求: 文本内容: Tom  11144455 12345678998 Jone  88888888 99999999999 1.将文本文件中的内容读入,并显示到屏幕上: 2.手动输入“Mary 77 ...

  8. 【转载】C++ IO库

    本篇随笔为转载,原贴地址:<C++ Primer>第8章 IO库 学习笔记. 1.IO类 #include <iostream> istream//从流中读取数据 ostrea ...

  9. C++ Primer 读书笔记: 第8章 标准IO库

    第8章 标准IO库 8.1 面向对象的标准库 1. IO类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream所定义的类型则用于 ...

随机推荐

  1. Caused by: java.lang.ClassNotFoundException: javax.persistence.NamedStoredProcedureQuery

    1.错误描述 2014-7-12 21:06:37 org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreat ...

  2. 一款PHP环境整合工具—VertrigoServ介绍

    Vertrigo简介 VertrigoServ 是一个Windows平台下的非常专业的.易于安装的免费网络开发环境,它集成了Apache, PHP, MySQL, SQLite, SQLiteMana ...

  3. MFC 中线程传递CString 是不安全的 转

     MFC 中线程传递CString 是不安全的       在MFC中,向线程传递CString变量参数时,很容易犯一个错误,就是使用一个超出生存期的变量,在主函数中定义的CString变量是局部变量 ...

  4. 几款实力很强的小工具,提高Windows使用效率

    如果你说我会用Windows,许多人会说,切,谁不会用Windows啊? 接下来说说我在Windows环境下,如何使用一些工具,提高效率.这些工具是我过去这些年雪藏的,今天放出来晒一晒. 当我要搜索文 ...

  5. Mybatis常见面试题

    Mybatis常见面试题 #{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是 ...

  6. [BZOJ1207] [HNOI2004] 打鼹鼠 (dp)

    Description 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个n*n的网格中,在某些时刻鼹鼠会在某一个网格探 ...

  7. javascript从数组中删除一个元素

    Array.prototype.remove = function(val) { var index = this.indexOf(val); if (index > -1) { this.sp ...

  8. 在linux上安装dotnetcore

    dotnet core已经出来有一段时间了,不是什么新名词了.但这个技术,目前还是比较新的,企业也没有普遍应用.它最大的亮点就是跨平台,也就是我们写的c#代码,可以运行在linux上. 在国内学习do ...

  9. 从头编写asp.net core 2.0 web api 基础框架 (5) + 使用Identity Server 4建立Authorization Server (7) 可运行前后台源码

    前台使用angular 5, 后台是asp.net core 2.0 web api + identity server 4. 从头编写asp.net core 2.0 web api 基础框架: 第 ...

  10. 微信小程序-weui实例代码提取

    搜索框 对应代码如下: wxss文件 <view class="page"> <view class="page__hd"> <v ...