C++ primer 第八章笔记 初稿

来源:互联网 发布:淘宝手机端gif 编辑:程序博客网 时间:2024/06/06 08:23

8.1 IO类

不同的IO处理操作,分别定义在三个独立的头文件中:

头文件 类型 iostream istream, wistream 从流读取数据 iostream ostream, wostream 向流写入数据 iostream iostream, wiostream 读写流 fstream ifstream, wifstream 从文件读取数据 fstream ofstream, wofstream 向文件写入数据 fstream fstream, wfstream 读写文件 sstream istringstream, wistringstream 从 string读取数据 sstream ostringstream, wostringstream 向string写入数据 sstream stringstream, wstringstream 读写string

其中,iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型。宽字符的类型与函数以w开头。

ifstreamistringstream均继承istream,故cin等方法一样适用于ifstreamistringstream

1. IO对象不能被拷贝,故不存在流类型的形参与返回类型,只能有引用的形式。

2. 条件状态

重要对象/方法 说明 iostate 机器相关的类型,指示流的条件状态 badbit 流已崩溃 failbit IO操作失败 s.fail() 若处于failbit 或 badbit,则为true eofbit 已经到达文件结尾 s.eof() 若处于 eofbit,则为true goodbit 没毛病 s.clear() 条件状态复位,返回类型void s.clear(flag) 条件状态回复到flag,返回类型同上 s.setstate(f) 条件状态设置为f s.rdstate() 返回当前条件状态,类型为iostate
int main(){    int a;    while(cin>>a)        cout<<a<<endl;    return 0;}

一个简易的输入检查

3. IO库定义了四个iostate类型的constexpr值,用于表示特定的位模式,本质上只有goodfail

goodbit:0000 0000;
badbit :0000 0001;
eofbit :0000 0010;
failbit:0000 0100;

4. 管理条件状态

cin.clear(cin.rdstate() & ~cin.failbit & ~cin.badbit);

5. 管理输出缓冲

  • 每个输出流都管理一个缓冲区
  • 缓冲区刷新有如下导致因素
    • 程序正常结束
    • 缓冲区已满
    • endl等显示刷新缓冲区
    • 设置为unitbuf
    • 输出流与另一个流相关联,且被关联的流发生读写操作
  • 显示刷新缓冲区的三种方法
    • flush——不附加任何字符
    • endl——附加一个换行
    • ends——附加一个空字符
  • unitbuf——每次输出都刷新缓冲区
  • tie函数
    • 无参数:返回指向输出流的指针
    • 有参数:实现关联(x.tie(&o))

8.2文件的输入输出

1. 基本信息

  • 头文件:fstream

  • 包含类型:

    • ifstream: 文件写入数据
    • ofstream:读取文件数据
    • fstream: 读写指定文件
  • 成员
    • 继承自iostream中的方法
    • fstream f(s): 创建一个fstream对象,关联s文件,s为string或char*,此时open()会被自动调用
    • fstream f(s,mode): 以mode指定打开文件的方式
    • f.open(s): 显示关联s并打开该文件
    • f.close(): 关闭流
    • f.is_open(): 反应文件是否成功打开且为关闭

2. 文件模式 (mode)

模式名 含义 in 以读的方式打开 out 以写的方式打开 app 从文件末尾开始写 ate 打开文件时定位到末尾 trunc 截断文件 binary 二进制读写
  • 设定out后才可以设定trunc
  • 设定为trunc后不可以设定app
  • out trunc无须显式设定
  • 设定为app模式可保护被open文件的原有内容

3. 使用实例

  • 复制文件
#include <iostream>#include <istream>#include <fstream>#include <cstring> #include <cmath>#include <vector>#include <algorithm>using namespace std;int main(){    ifstream input;    ofstream output("text2.txt");    string s;    input.open("text1.txt");    if(input){        while(input>>s){            output<<s<<" ";            cout<<s<<endl;        }    }    return 0;}

如果调用open失败,或在关闭已经打开文件的文件流前调用open,failbit置位。
如果一个文件流到达作用域末尾,则自动调用close()。

8.3 string 流

1. 基本信息

  • 头文件: sstream
  • 父类:: iostream
  • 包含类型:

    • istringstream
    • ostringstream
    • stringstream
  • 成员

    • sstream st(s):创建一个与s串相关联的字符串流对象
    • st.str():返回s串
    • st.str(s):将字符串流与s串相关联
0 0
原创粉丝点击