ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

IO库笔记记录

2021-11-13 09:33:35  阅读:150  来源: 互联网

标签:string 记录 fstream 可以 笔记 IO 刷新 ostream


IO一般指的是 从设备中读取数据或者输出数据到设备中。这里的设备是多种多样的,可以是 文件,控制台窗口等,还可以是一些内存IO。

  1. IO类

    • iostream头文件中定义了基本的流,是其他类的基类。cin cout cerr 是这个的对象
    • fstream头文件中定义了文件流,属于是 作为文件的细分领域
    • sstream头文件中定义了字符串流,对应的设备可以认为是string

    这样的层次设计利用了继承机制。好处是可以像使用基类一样使用子类。我们可以像使用cin cout 那样使用fstream sstream 中的对象

    • IO类不可以被赋值。如果要作为参数或者返回值使用,要使用其引用。
    • IO类的状态通过其定义的一个iostate的bit集合 / 几个标志位(badbit, failbit, eofbit, goodfit)来进行判定。
    • IO类的几个标志位可以通过 对象名::badfit 的方式进行访问。也可以通过相应的查询函数的方式来进行访问。 每一个位都有对应的函数。fail函数在fail和bad位任何一个被置位的时候都返回true。good函数在没有任何错误位被置位的时候返回true
    • 每一个输出流都管理一个输出缓冲区。输出缓冲区的刷新默认只是在一些条件下才自动刷新。缓冲区满, 程序正常退出,使用一些操纵符比如endl(加入换行并刷新),ends(加入空字符并刷新),flush(刷新) , 也可以设置unitbuf来设置流内部的状态为有东西就立即刷新 , 关联的流的话,一个刷新,另外一个也会跟着刷新(关联的流有时候是必要的,比如cin和cout是关联的。可以保证在输入之前所有的输出都正常显示出来,否则会引发混乱,)。nounitbuf会回到正常的刷新方式。
    • tie函数可以完成流的关联。当没有参数的时候,表示查看关联流对象,其返回关联的ostream指针或者nullptr(无关联对象)。当参数为一个ostream的指针的时候,表示关联到这个对象。参数只可以是输出流指针。但是调用函数的可以是istream也可以是ostream对象。
  2. 文件输入输出

    • fstream头文件中有三个类可以用来进行文件的输入输出。ifstream(文件输入),ostraem(文件输出),fstream(文件输入和输出)。这些类型是iostream的子类。因此可以像使用cin cout一样使用。但是还有其他的方方法。
    • 上述的三种类的构造函数都可以1 默认构造函数 2 接受一个string或者c字符串类型的文件名 3 在2的基础上再加上一个mode,打开方式。三种类有open函数,close函数,is_open()函数
    • 如果构造函数中有文件名,那么自动调用open。当这个对象销毁的时候,自动调用close函数来关闭文件。
    • 由于c++的多态特性,可以在原本要求ostream引用 的地方传入 ifstream 同理 istream。这就体现了多态的优越性
    • 文件模式有in out app ate trunc binary 几种。在设置的时候可以用 | 进行分隔,表示或的关系。这些内容定义在相应的类内。in可以只可以用于ifstream或者fstream 。 out app trunc只可以用于ostream和fstream。istream默认in ostream默认out fstream默认为in | out
  3. string流

    • sstream头文件中定义了istringstream,ostringstream , stringstream三个类。
    • 其有构造函数 1 默认构造函数 2 接受一个string作为参数 其有成员函数str,当无参数的时候,返回其内部绑定的string,当有参数s的时候,表示绑定这个string。
    • istringstream可以配合getline(istream流, string) 来使用。先读取一行,再对一行的数据构造stringstream,进行拆解。

标签:string,记录,fstream,可以,笔记,IO,刷新,ostream
来源: https://blog.csdn.net/weixin_44261255/article/details/121272289

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有