C++标准I/O库:iostream, fstream, sstringstream

在写代码的过程中,我们最常做的事就是io操作,无论是对控制台,还是文件。但一段时间不写代码就忘了,这里理一下C++标准I/O库的具体类和操作。

C++的标准I/O库包括我们经常使用的iostream,fstream,以及不太经常使用的stringstream。前两者是对控制台和文件的I/O操作,stringstream则可以使用I/O操作对内存中的数据进行格式化操作。C++的标准I/O操作相对与C来说,更加的简明,安全,但执行效率会有所下降。


标准I/O库类继承体系                                                                    

对于编程语言来说,在概念上,从控制终端、磁盘文件以及内存中读取数据都应该不影响I/O操作,C++为了解决支持不同设备的字符流,通过面向对象的思想(废话了,你要不用这个思想,你还是什么C++),通过继承来实现一组类,分别处理控制终端、磁盘文件,以及内存数据的I/O操作,下图是引用cplusplus官网关于输入输出流类继承体系的关系图,自己画了一下,如下:

由上图可以知道,I/O操作的基类是ios_base,各个类的用途如下:

  • <iostream>
  •                      istream    从流中读取数据
  •                      ostream   向流中写数据
  •                      iostream  对流进行读写操作,派生于istream和ostream
  • <fstream>
  •                      ifstream    从文件中读取数据,派生于istream
  •                      ofstream   向文件中写数据,派生于ostream
  •                      fstream     读写文件, 派生于iostream
  • <sstream>
  •                      istringstream    读取string对象,派生于istream
  •                      ostringstream   写string对象,派生于ostream
  •                      stringstream     读写string对象,派生于iostream

C++标准对于I/O体系,定义了基本的流格式标志(hex, dec,等),文件打开模式(in, out, bin等),流的状态标志(failbit等),以及相关的函数等,如下在linux 下/usr/include/c++/4.6/bits/ios_base.h中关于这些标志的枚举定义:

  • 流格式标志

enum _Ios_Fmtflags 
    { 
      _S_boolalpha      = 1L << 0,
      _S_dec            = 1L << 1,
      _S_fixed          = 1L << 2,
      _S_hex            = 1L << 3,
      _S_internal       = 1L << 4,
      _S_left           = 1L << 5,
      _S_oct            = 1L << 6,
      _S_right          = 1L << 7,
      _S_scientific     = 1L << 8,
      _S_showbase       = 1L << 9,
      _S_showpoint      = 1L << 10,
      _S_showpos        = 1L << 11,
      _S_skipws         = 1L << 12,
      _S_unitbuf        = 1L << 13,
      _S_uppercase      = 1L <
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值