IO库
- IO库和头文件
iostream
:包含的类型:istream
,wistream
:表示从流里面读取数据;ostream
,wostream
,向流里面写入数据;iostream
,wiostream
:表示的含义是
读写流;fstream
:含义和上面相似;sstream
:istringstream
,wistringstream
:类似于这种格式含义和上面的相同,其中w
:表示的是wchar_t
类型,用来操纵宽字符语言;- 标准库可以忽略不同类型之间的差异,这是通过继承机制来实现的,例如:
ifstream
和istringstream
都是继承istream
的; - 标准库流特性都可以无差别的应用于普通流,文件流,和
string
流,以及char
或者宽字符;
IO
对象无拷贝或者赋值
IO
对象不能够拷贝或者赋值;- 通过某些特定的操作可以用来访问和操纵流的条件状态;常用的状态包括:
状态 | 含义 |
---|---|
iostream | 用于表达条件状态的完整功能 |
badbit | 用来表示流已经崩溃 |
failbit | 用来表示一个IO 操作已经失败 |
eofbit | 用来指示流到达了文件结束 |
goodbit | 用来指出流未处于错误状态,此值保证是0 |
s.eof() | 若s的eofbit置位,则返回true |
s.fail() | 如果流的failbit 或者badbit 置位,则返回为true |
s.bad() | 如果badbit置位那么就返回为true |
s.good() | 如果s处于有效状态,就返回true |
s.clear() | 将流的所有状态位复位,将流的状态设置为有效 |
s.ckear(flags) | 根据所给的状态位进行复位操作 |
s.setstate(flags) | 表示设置相应的状态位 |
s.rdstate() | 表示查看当前的状态位 |
- 在使用流时,应该检查返回条件,也就是需要判断流执行是否成功;
- 流的状态可以使用上述的条件进行查询;
关于输出缓冲的问题:
- 缓冲机制可以使操作系统将多个输出操作,整合成单一的系统级别的写操作;
- 缓冲区刷新的原因包括:
- 1.程序正常结束,
main()
函数的return
操作执行,并且缓冲刷新被执行; - 2.缓冲区满时,需要执行刷新操作,新的数据才可以写入缓冲区;
- 3.在每个输出操作之后,可以使用
unitbuf
设置流的内部状态,来清空缓冲区,默认情况下,cerr
的内容是立即刷新的; - 4.一个输出流被关联到另一个输出流,当读写被关联的流时,关联的流会立即刷新;默认情况下,
cin
和cerr
是关联到cout
的,所以cin
或者cerr
存在
操作时,cout
会被立即刷新;
- 1.程序正常结束,
- 手动刷新你缓冲区的几种方式:
endl
:执行换行操作并且刷新缓冲区;flush
:刷新缓冲区,但是不输出任何额外的字符;ends
:输出空字符,然后刷新缓冲区;
- 使用
cout << unitbuf;
表示在之后的所有输出操作之后,都应该立即刷新缓冲区; - 使用
cout << nounitbuf;
表示回归到正常的缓冲方式; - 当一个程序执行时崩溃,那么输出缓冲区,不会被立即刷新;
tie
函数的两个重载的作用:
a.tie()
:如果a关联到某个输出操作,那么就返回关联的指针,如果没有关联,就返回NULL
;a.tie(&b)
:表示将a
的操作关联到b
的操作上面;
- 每个流最多关联到一个流,但是多个流都可以关联到
ostream
里面; - 关于文件的输入输出操作
ifstream
:从一个制定文件读取数据;ofstream
:从一个制定文件写入数据;fstream
:读写制定文件;
- 文件流对象
ifstream in();
:用于构造一个ifstream
并且打开指定对象;
- 成员函数
open()
和close()
,分别用于打开和关闭制定文件,并且需要注意的是如果对于一个打开的文件流执行open
操作,会导致failbit
被重置,之后的
所有对于文件的操作就会失败; - 当一个
fstream
对象离开作用域时,会被自动的析构和销毁,同时close()
函数会被自动的调用; - 文件的打开模式:
in
:表示按照只读模式打开;out
:表示按照写的方式打开;app
:每次写操作,都定位到文件的末尾;ate
:打开文件立即定位到文件的末尾;trunc
:表示截断文件;binary
:表示按照二进制文件进行IO
操作;- 按照
out
打开的文件会丢失已有的数据,如果需要保留,需要显示的指定app
或者是in
模式; - 在每次打开文件时,都需要设定文件模式,可以显示的进行设定,也可以隐式的进行设定,如果没有指定,就会使用默认值;
string
流:- 包含在头文件
sstream
里面,包含三中类型来支持内存IO
;
istringstream
:表示从string
里面读取数据;ostringstream
:表示向string
里面写入数据;stringstream
:表示的含义是既可以向string
里面写入数据,也可以读取string
里面的数据;
- 包含在头文件