13 Stream

13 Stream

13.2 基本的Stream类别和Stream对象

 其中,typedef basic_ios<char> ios;   //针对char的特化版本,wios是针对wchar_t的特化版本。

 

全局性的Stream对象:cin,cout,cerr,clog,wcin,wcout,wcerr,wclog。

 

头文件:

<iosfwd>:内含stream classes的前置说明。此文件是必要的,因为前置说明不能简单的加一句诸如class ostream;这样的声明就行了。

<streanbuf>:basic_streambuf<>的定义。

<istream>:内含basic_istream<>和basic_iostream<>的定义。

<ostream>:内含basic_ostream<>的定义。

<iostream>:内含全局性的stream对象(cin、cout等)的定义。

参数化的操控器(manipulators)、file streams、string streams需要包含其他头文件(<iomanip>, <fstream>, <sstream>, <strstream>)。

 

13.3 <<和>>

bool:缺省情况下,布尔值的读入和输出均以0、1表示。

char和wchar_t:缺省跳过起头的空格,如果想读入所有字符,包括空格,可清楚skipws标志或使用成员函数get()。

char*:跳过起头的空格,一直读到非空格或end-of-file。

void*:打印或读入指针。

stream buffer:直接读取或改写stream buffer。

 

13.4 stream的状态

使用方法:这些常数定义于class ios_base中,可以std::ios_base::eofbit,也可以std::ios::eofbit(ios派生自ios_base)。

注意:当读到end-of-file之后继续读取时,eofbit和failbit会同时设立。

 

while(std::cin >> obj){...} //此时的cin用于条件判断,返回值cin会调用operator void*,返回stream是否发生错误。

if(!(std::cin >> x)){...}   //调用operator !。


13.5 标准I/O函数

1、输入相关成员函数


举例:istream::getline()读入的内容包括换行符号或delim,而非在两者之前就终止,但是不存储与str中。读入的字符序列以字符串终止符号位结尾(如'\0')。

 

2、输出相关成员函数

put、write、flush。

 

13.6 操控器

实际上,ostream& ostream::operator << (ostream& (*op)(ostream&)){return (*op)(*this);},注意endl()等是模板函数。

 

13.7 格式化

成员型别ios::fmtflags用来存储组态标志。

相应的操控器:setiosflags(flags),resetiosflags(mask)(清除mask所标识的一组)。注意对于含有参数的操控器,一定要加上<iomanip>。

用法举例:std::cout.setf(std::ios::showpos | std::ios::uppercase),

std::cout<<resetiosflags(std::ios::adjustfield)<<setiosflags(std::ios::left)。

布尔值:标志boolalpha(以文字表示bool值),对应操控器boolalpha,noboolalpha。

字段宽度、填充字符、位置调整:掩码adjustfield,标志left、right、internal,操控器setw(val)、setfill(c)、left、right、internal。

正记号:标志showpos(在正数前加上正记号),操控器showpos、noshowpos。

大写字符:标志uppercase,操控器uppercase、nouppercase。

数值进制:掩码basefield,标志oct、dec、hex,操控器oct、dec、hex。举例:cout.setf(ios::hex, ios::basefield);//设置一个标志,同时清除同组的其他标志;

    显示数值进制:标志showbase(八进制以0开头,16进制以0x开头),操控器showbase、noshowbase。

浮点数:掩码floatfield,标志fixed(小数计数法)、scientific,操控器fixed、scientific;

    小数点:标志showpoint(总是带有小数点),操控器showpoint、noshowpoint;

    精度:操控器setprecision(val)(以val为新的精度)。

标志skipws(调用>>时,自动跳过起始空格),操控器skipws、noskipws。

标志nounitbuf(每次输出后,清空output缓冲区),操控器unitbuf、nounitbuf。

 

13.8 国际化相关成员函数

imbue(loc)设置locale对象。getloc()返回当前local对象。

widen(c)把字符c转换为stream字符集中的字符。

narrow(c,def)把stream字符集中的c转换为一个char字符,如果无对应字符,返回def。

 

13.9 文件存取:ifstream、ofstream、fstream、filebuf

1、文件标志

ofstream file(filename.c_str());  //file stream class不以string作为构造函数的参数。

ofstream file(“abc.txt”, ios::out | ios::app); 

 

成员函数:(实际上file stream所拥有的文件是隐式打开或关闭的,但也可使用成员函数显示操作)

open(name),open(name,flags),close(),is_open()。

如:ifstream file; file.open("abc.txt"); ...; file.clear();//使得该file stream处于良好状态。 file.close();

 

2、随机存取

注意:file.tellg()的返回值型别是std::ios::pos_type(即std::streampos,并不是整数型别),偏移量为ios::off_type(即streamoff,是个有符号整数),相对位置有beg、cur、end。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值