C++_IO类知识点总结

本文总结了C++中的IO类,包括通用IO类操作、IO对象的条件状态管理和输出缓冲策略。详细阐述了如何读写文件,以及对fstream、istringstream、ostringstream和stringstream等string流的使用。同时,提到了输出缓冲的刷新机制,如endl、flush和ends的使用,以及文件输入输出的相关注意事项。
摘要由CSDN通过智能技术生成
 

IO库

1.   通用IO类操作

为了支持不同种类的IO处理操作,标准库定义了一些IO类型,分别定义在3个头文件中:iostream定义了用于读写流的基本类型;fstream定义了读写文件的类型;sstream定义了读写内存string对象的类型。

头文件

类型

iostream

istream 从流读取数据

ostream向流写入数据

iostream读写流

fstream

ifstream从文件读取数据

ofstream向文件写入数据

iofstream读写文件

sstream

istringstream从string读入数据

ostringstream向string写入数据

stringstream 读写string

1.   IO对象无拷贝和赋值

ofstream out1, out2;

out1 = out2;  //错误,不能对流对象进行赋值

ofstream print(ofstream); //错误,不能初始化ofstream参数

out2 = print(out2);   //错误,不能拷贝流对象

      由于不能拷贝IO对象,因此我们也不能将形参或返回类型设为流类型。进行IO操作的函数通常以引用方式传递和返回流。读写数据

IO对象会改变其状态,因此传递和返回的引用不能是const的。

2.   条件状态

IO类定义了一些函数和标志,可以帮助我们访问和操纵流的条件状态。

IO库条件状态

s.eof()

s.fail()

s.bad()

s.good()

s.clear()

若流的eofbit置位,返回true

若流的failbit或badbit置位,则返回true

若流的badbit置位,则返回true

若流处于有效状态,则返回true

将流s中所有条件状态位复位,将流的状态设置为有效。返回void。

3.   管理输出缓冲

每个输出流都有一个缓冲区,用来保存程序读写的数据。有了缓冲机制,操作系统就可以将程序的多个输出组合成单一的系统级写操作,可以带来很大的性能提升。

导致缓冲刷新的原因:

[1].程序正常结束,作为main函数的return操作的一部分,缓冲刷新被执行。

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

[3].在每个输出操作之后,我们可以用操作符unitbuf设置流的内部状态,来清空缓冲区。在默认情况下,对cerr是设置unitbuf的,因此写到cerr中的内容都是立即刷新的。

cout << unitbuf;  //任何输出操作都立即刷新,无缓冲

cout << nounitbuf; //回到正常的缓冲方式

[4].一个输出流可能被关联到另一个流。在这种情况下,当读写关联的流时,被关联到的流的缓冲区被刷新。例如,默认情况下,cin和cerr都关联到cout,读cin或写cerr都会导致cout的缓冲区被刷新。

[5].显式刷新:endl(输出换行,再刷新缓冲区);flush(直接刷新缓冲区,不附带任何其他字符);ends(输出空字符,然后刷新缓冲区)

2. 文件输入输出

     除了继承自iostream类型的行为之外,fstream中定义的类型还增加了一些新的成员来管理与流关联的文件。

fstream特有的操作

fstream fstrm;

fstream fstrm(s);

 

 

fstream fstrm(s, mode);

 

fstrm.open(s);

 

fstrm.close();

 

fstrm.is_open();

创建一个未绑定的文件流

创建一个fstream,并打开名为s的文件。默认的文件模式mode依赖于fstream的类型

按mode打开名为s的文件,s文件绑定到fstrm

打开名为s的文件,并将文件与fstrm绑定。返回void。

关闭与fstrm绑定的文件。返回void。

返回一个bool值,指出与fstrm关联的文件是否成功打开且尚未关闭。

      *对一个已经打开的文件流调用open会失败,并会导致failbit被置位。随后使用文件流的操作都会失败!

      *当一个fstream对象被销毁时,close会自动调用。

文件模式

in

out

app

binary

以读方式打开

以写方式打开

每次写操作前均定位到文件结尾

以二进制形式进行IO

3.string流

     sstream头文件定义了三个类型来支持内存IO,这些类型可以向string写入数据,从string读取数据,就像string是一个IO流一样:

istringstream,ostringstream, stringstream。

stringstream特有的操作

stream strm;

stream strm(s);

 

strm.str();

strm.str(s);

Strm是一个未绑定的stringstream对象

Strm是一个stringstream对象,保存string s的一个拷贝。

返回strm所保存的string的拷贝

将string s拷贝到strm中,返回void。

 

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值