[C++][STL]输出流(Output Stream)的格式控制

控制C++的Stream的格式,主要有三种方法,操作flag、使用manipulator和使用stream的成员函数。

Manipulator

manipulator本质是一个函数,但是由于Stream类对<<做了重载,所以可以使用<<调用manipulator,看起来十分赏心悦目。

ostream& operator << (ostream& (*op)(ostream& strm))
{   // ostream& (*op)(ostream&) - 返回值为ostream&, 参数类型为ostream&的一个函数
// operator << - 重载了<<运算符,并将*this当做(*op)的参数 return (*op)(*this); // 等价于 return (*op)(strm) }

 执行manipulator的时候,本来应该是这么执行的

ostream xx = (*op)(strm);
xx << blahblah;
// OR
(*op)(strm) << blahblah;

 现在重载了<<,可以这么做,感觉像是将(*op)输出了一样,好神奇的样子(⊙o⊙)

strm << (*op) << blahblah;

有的Manipulator有多个参数,这时要在括号里补充剩余的参数。下文列出的Manipulator,都是用于<<操作符的。

有的Manipulator和flags重名,不要被弄糊涂了。

Manipulator列表

操作flags的

  • setiosflags(flags) - 设置flags,等价于strm.setf(flags)
  • resetiosflags(flags) - 重置flags,等价于strm.set(0, mask),其中mask对应flags

直接控制格式的

  • boolalpha - 将bool变量显示为"true", "false"
  • noboolalpha - 将bool变量显示为"1", "0"

布局相关

  • setw(val) - 等价于width(val)成员函数
  • setfill(c) - 等价于fill(c)成员函数
  • left
  • internal
  • right

数值表示相关

  • showpos - 显示数值前边的+号
  • noshowpos - 不显示数值前边的+号
  • uppercase - 数值表示中的字母大写
  • nouppercase - 数值表示中的字母小写
  • oct - 用八进制表示数值
  • dec - 用十进制表示数值
  • hex - 用十六进制表示数值
  • showbase - 显示八进制十六进制数值的前缀
  • noshowbase - 不显示八进制十六进制数值的前缀

浮点数相关

  • showpoint - 强制显示小数点
  • noshowpoint - 不强制显示,而不是强制不显示
  • setprecision(val) - 设置精度
  • fixed - 小数计数
  • scientific - 科学计数

其他

  • unitbuf - 单步操作后,缓存清空
  • nounitbuf - 单步操作后,缓存不清空

Flags

Flags列表

  • boolalpha - 默认0 - 是否将bool变量显示为"true", "false"(也可能是其他文字,依locale而定)
  • adjustfield/left
  • adjustfield/internal - 这个不是居中对齐,符号左对齐,数值右对齐~
  • adjustfield/right
  • adjustfield/None - 调整对其方式,在width大于实际宽度时可以看出效果,默认是右对齐
  • showpos - 默认0 - 是否显示正号
  • uppercase - 默认0 - 是否显示大写,注意,是数值显示的大写,至于字符,该怎么显示仍然怎么显示

进制相关

  • basefield/oct - octal八进制
  • basefield/dec - decimal十进制
  • basefield/hex - hexadecimal十六进制的
  • basefield/None - 数值的进制,默认是十进制
  • showbase - 默认0 - 是否显示八进制和十六进制数值的前缀

浮点数相关

  • floatfield/base - 使用小数点
  • floatfield/scientific - 使用科学表示法
  • floatfield/None - 小数值使用小数点,大数值使用科学表示法
  • showpoint - 默认0 - 是否强制显示小数点

其他

  • unitbuf - 默认0(但是对cerr和clog默认是1) - 每次操作后是否清空缓存

 

Member Functions

Function列表

  • width(val) - 默认0,只对下一次输出有效,只增加不缩短 - 设置下一次输出的宽度
  • fill(c) - 默认空格,只对填充有效,对'\t'和' '均无效 - 指定填充字符
  • precision(val) - 默认6 - 浮点数精度,精度外的数值采用四舍五入计算~
posted @ 2012-07-25 16:06  斯啦丝拉  阅读(2663)  评论(0编辑  收藏  举报