[C++ Primer 第4版]第8章 标准IO库

P244 getline函数,需要分别取istream类型string类型的两个引用形参,其功能是从istream对象读取一个单词,然后写入string对象中

P244 一般而言,通过继承关联起来的类型都共享共同的接口。当一个类继承另一个类时,这两个类通常可以使用相同的操作。更确切的说,如果两种类型存在继承关系,则可以说一个类“继承”了其父类的行为——接口。

P244 IO类型在三个独立的文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream定义读写存储在内存中的string对象的类型。

P245 IO标准库类型和头文件

[头文件] [类型]

iostream istream从流中读取

ostream写到流中去

iostream对流进行读写:从istream和ostream派生而来

fstream ifstream从文件中读取:从istream派生而来

ofstream写到文件中去:由ostream派生而来

fstream读写文件:由iostream派生而来

sstream istringstream从string对象中读取:由istream派生而来

ostringstream写到string对象中去:由ostream派生而来

stringstream对string对象进行读写:由iostream派生而来

P246 wostream, wistream, wiostream, wifstream, wofstream, wfstream, wistringstream, wostringstream, wstringstream, wcin, wcout, wcerr.

P246 标准库类型不允许做复制或赋值操作。

         只有支持复制的元素类型可以存储在vector或其他容器类型里。

         形参或返回类型不能为流类型。如果需要传递或返回IO对象,则必须传递或返回指向该对象的指针或引用。一般情况下,如果要传递IO对象以便对它进行读写,可用非const引用的方式传递这个流对象。

P247 IO标准库的条件状态

P247 流必须处于无错误状态,才能用于输入或输出。检测流是否可用的最简单的方法是检查其真值:

         if(cin)

        while(cin >> word)

P248 条件状态:badbit, failbit, eofbit, bad, fail, eof, good, clear, setstate

P248 rdstate成员函数返回一个iostate类型的值,该值对应于流当前的整个条件状态。

P249 下面几种情况将会导致缓冲区的内容被刷新,即写入到真实的输出设备或者文件:

        (1)程序正常结束。作为main返回工作的一部分,将清空所有输出缓冲区。

        (2)在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新。

        (3)用操纵符(manipulator)显式地刷新缓冲区,例如行结束符endlflushends

        (4)在每次输出执行完成后,用unitbuf操作符设置流的内部状态,从而清空缓冲区。

        (5)可将输出流与输入流关联(tie)起来。在这种情况下,在读输入流时将刷新其关联的输出缓冲区。

P251 假设ifile和ofile是存储希望读写的文件名的string对象,可如下编写代码:

        //construct an ifstream and build it to the file named ifile

        ifstream infile(ifile.c_str());

        //ofstream output file object to write file named ofile

       ofstream outfile(ofile.str());

       为ifstream或者ofstream对象提供文件名作为初始化式,就相当于打开了特定的文件。

P252 由于历史原因,IO标准库使用C风格字符串而不是C++ string类型的字符串作为文件名。在创建fstream对象时,如果调用open或使用文件名作为初始化式,需要传递的实参应为C风格的字符串,而不是标准库string对象。程序常常从标准输入获得文件名。通常,比较好的方法是将文件名读入string对象,而不是C风格字符数组。假设要使用的文件名保存在string对象中,则可调用c_str成员获取C风格字符串。

P252 打开文件后,通常要检验打开是否成功:

        if(! infile)

        当测试对象if(outfile)返回true意味着文件已经可以使用。

当测试对象if(!outfile)返回true意味着文件为准备好。

P252 fstream对象一旦打开,就保持与制定的文件相关联。如果要把fstream对象与另一个不同的文件关联,则必须先关闭(close)现在的文件,然后打开(open)另一个文件。

P254 如果程序员需要重用文件流读写多个文件,必须在读另一个文件之前调用clear清除该流的状态。

P254 与条件状态一样,文件模式也是整型常量,在打开指定文件时,可用位操作符只是一个或多个模式。

          in 打开文件做读操作

          out 打开文件做写操作

          app 在每次写之前找到文件尾

          ate 打开文件后立即将文件定位在文件尾

          trunc 打开文件时清空已存在的文件流

          binary 以二进制形式进行IO操作

        out、trunc和app模式只能用于指定与ofstream或fstream对象关联的文件;

        in模式只能用于指定与ifstream或fstream对象关联的文件;

        所有的文件都可以用ate或binary模式打开。ate模式只在打开时有效:文件打开后将定位在文件尾。binary模式打开的流则将文件以字节的形式处理,而不解释流中的字符。

        默认时,与ifstream流对象关联的文件将以in模式打开,该模式允许文件做读的操作;与ofstream关联的文件则以out模式打开,使文件可写。以out模式打开的文件会被清空:丢失该文件存储的所有数据。从效果来看,为ofstream对象指定out模式等效于同时指定了out和trunc模式。对于用ofstream打开的文件,要保存文件中已存在的数据,唯一的方法是显示地指定app模式打开。

P255 模式是文件的属性而不是流的属性。

P256 有效的文件组合模式

        out 打开文件做写操作,删除文件中已有的数据

        out | app 打开文件做写操作,在文件文写入

        out | trunc 与out模式相同

        in 打开文件做读操作

        in | out 打开文件做读、写操作,并定位于文件开头处

        in | out | trunc 打开文件做读、写操作,删除文件中已有的数据

        以上所有的打开模式组合还可以添加ate模式。

P257 string line, word;// will hold a line and word from input, respectively

         while(getline(cin, line))//read a line from the input into line

         {

                  //do per-line processing

                  istringstream stream(line);// bind to stream to the line we read

                  while(stream >> word)//read a word from line

                  {

                           // do per-word processing

                  }

         }

P258 sstream输入和输出操作可自动地把算术类型转化为相应的string表达形式,反过来也可以。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值