流最初起源于C的I/O操作,像scanf()、printf()这种,不过C的I/O操作有时候是不安全的,它不会去检查你的输出类型等的问题,因此C++有了流的概念:
    image.png
    image.png
    流(Stream)的特点是一维且单方向的,不同于C的文件读取概念,C++的文件读取输出是沿着一条方向读写的,不能在任意的地方去读和写。
    下面是Stream的常用库和标头(第三行是已经过时的),第一行和第二行分别是通用和文件读写
    image.png
    流的操作符分别叫做Extractors和Inserters,它们分别代表读和写,实际用的时候是右移号(>>)和左移号(>>),至于第三种(Manipulators)是用于控制流如何去读写(类似于C的0.2f%这种)
    image.png
    流的操作对象分为文本文件和二进制文件两种。
    image.png
    流会用下面的标准来去解析给定类型的内容
    image.png
    当然也可以自己去做这个过程
    image.png
    要保证的一点是:这个自定函数的返回类型必须是&istream的,因为流在读取和输出文件的时候是沿着一条方向的,保证同类型才可以像上面的a, b, c那样连锁起来。

    有些函数是不需要<<或者>>来实现读取输出的,像下面的.get()和.put()
    image.png
    其他的一些自带函数:
    image.png

    自然,也会有一些常用的固定Manipulators,像下面这些,我叫它格式控制符
    image.png
    下面是一个有趣的示例,在例子里面,把1000.243控制2位精度输出,得到1e03。
    image.png
    有时候自定义一些操作是可行的像下面的tab:
    image.png
    下面是一些控制标志(flags):
    image.png