8 IO库-IO类

一、IO库头文件和类型

头文件 类型

iostream

(定义了用于读写流的基本类型)

 istream,wistream 从流读取数据;

 ostream,wostream 向流写入数据;

 iostream,wiostream读写流

fstream

(定义了读写命名文件的类型)

 ifstream,wifstream 从文件读取数据;

 ofstream,wofstream 向文件写入数据;

 fstream,wfstream读写文件

sstream

(定义了读写内存string对象的类型)

  istringstream,wistringstream 从string读取数据;

 ostringstream,wostringstream 向string写入数据;

 stringstream,wstringstream读写string

 

标准库通过继承机制使我们忽略不同类型流之间的差异。ifstream、istringstream继承自istream所以可以像istream对象一样使用ifstream、istringstream,即均可使用cin;fstream、ostringstream继承自ostream同样可以使用cout。

二、 IO对象无拷贝或赋值

ofstream out1,out2;
out1 = out2;   //错误,不能对流对象赋值
ofstream print(ofstream);  //错误,不能初始化ofstream参数
out2 = print(out2);  //错误,不能拷贝流对象

三、IO操作条件状态

因为IO操作容易发生错误,所以IO库定义了操纵流的条件状态。

 

四、管理输出缓冲区

每个输出流都管理一个缓冲区,用来保存程序读写的数据。                                                                       

文本可能立即打印出来,也可能被操作系统保存在缓冲区随后打印,有了缓冲机制,操作系统就能将程序的多个输出操作组合成单一的系统级写操作。

1、缓冲区刷新的原因

    程序正常结束;

    缓冲区慢,需要刷新后新的数据才能写入缓冲区;

    使用操作符如endl来显式的刷新缓冲区;

    一个输出流可能被关联到另一个流。

2、刷新输出缓冲区

    endl完成换行并刷新缓冲区;

    flush刷新缓冲区但没有任何额外字符;

    ends向缓冲区插入一个空字符,然后刷新缓冲区

3、 unitbuf操纵符

cout << unitbuf; //所有输出操作后都会立即刷新缓冲区
cout <<nounitbuf; //回到正常缓冲方式

4、关联输入流和输出流

当一个输入流被关联到一个输出流时,任何从输入流读取数据的操作都会先刷新关联的输出流。

/*标准库将cout和cin关联在一起*/
cin >> ival;  //导致cout缓冲区被刷新

交互式系统通常应该关联输入流和输出流,这意味着所有输出,都会在读操作前被打印出来。

 

 

 

posted @ 2018-12-19 20:10  小牙签123  阅读(563)  评论(0)    收藏  举报