IO库
格式化输入与输出
标准库定义了一些操纵符来修改流的格式状态。
由于流是一个对象,操纵符实际上是修改了流的状态,因此它是持久的,比如cout就是ostream的一个实例,因此会一直保持着这种改变,因此我们最好在改变流的状态后,使用完后再改回去,因此大部分操作符都是成双成对的。而一类的操作运算符,比如进制,后一个操作符的状态会覆盖前一个操作符的状态。
实际上这些操纵符是函数,参数是一个流,通过类似输出的方式调用这些函数来改变流的状态。
当需要控制小数精度的时候,可以使用cout.precision(x)或者cout<<setprecision(x)的方式。
控制留白
left | 左对齐输出 |
---|---|
right | 右对齐输出 |
internal | 左对齐符号,右对齐值 |
未格式化的输入输出
上述的都是格式化的输入输出,也就是根据读取或写入的类型来格式化。而未格式化就是将其当做无意义的字符来处理。
时常我们需要读取一个字符才知道我们是否应该现在读取它,这可以通过后三个函数来实现。
但标准库并不保证能连续调用putback或unget。
另外,get和peek读取时读取的都是将其作为int读取(将char转换为unsigned char,最后再转为int),为了留出一些字符来表示文件尾,比如标准库用负值表示文件尾,而cstdio用EOF来表示文件尾。
如果在gcount前调用了peek、unget或putback,那么它的返回值为0。
少使用这些底层函数,很容易出错。比如在一台char被实现为unsigned char的机器上,cin.get()读到的EOF就永远不再是EOF了,如果用char存储的话。
流的随机访问
虽然std中所有的流都支持随机访问,但是一般只有文件流和字符串流是真正有效的。
不管在什么情况下,一个流中都只有一个标记,即便这个流有两个流在读,并且读和写共享同一个标记,因此时常需要seek来重置。
off可正可负表示方向。
IO库
https://lhish.github.io/project/hide/IO库/