C++标准库——iomanip
1.功能
用来对输入输出操作的格式进行更加方便的控制,在ios_base基类的基础上将每一种格式的设置和删除都进行了函数级的同名封装,提供了全局的调用接口函数,支持在运算符“<<”和“>>”上的多次使用,配合ios_base实例的控制。是I/O流控制头文件,就像C里面的格式化输出一样。
如果在一次输出过程中需要混杂多种格式,使用ios_base的成员函数来处理就显得很不方便。STL另提供了iomanip库可以满足这种使用方式。
2.接口
控 制 符 | 作 用 |
---|---|
setbase(n) | 设置整数为n进制(n=8,10,16) |
setfill(n) | 设置字符填充,c可以是字符常或字符变量 |
setprecision(n) | 设置浮点数的有效数字为n位 |
setw(n) | 设置字段宽度为n位 |
setiosflags(ios::fixed) | 设置浮点数以固定的小数位数显示 |
setiosflags(ios::scientific) | 设置浮点数以科学计数法表示 |
setiosflags(ios::left) | 输出左对齐 |
setiosflags(ios::right) | 输出右对齐 |
setiosflags(ios::skipws) | 忽略前导空格 |
setiosflags(ios::uppercase) | 在以科学计数法输出E与十六进制输出X以大写输出,否则小写。 |
setiosflags(ios::showpos) | 输出正数时显示”+”号 |
setiosflags(ios::showpoint) | 强制显示小数点 |
resetiosflags() | 终止已经设置的输出格式状态,在括号中应指定内容 |
上述接口与ios_base的格式控制成员是对应的,可以二者配合进行输出格式的精准控制。
其中的精度控制默认是6位有效数字,科学计数法中的指数部分e为默认小写。setw设置的宽度如果小于字段宽度会失效。
3.实例
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{ double PI=3.141592654; cout<<PI<<endl; cout<<setprecision(2)<<PI<<endl; cout<<fixed<<setprecision(2)<<PI<<endl; cout<<setfill('*')<<setw(20)<<setprecision(10)<<PI<<endl; cout<<setfill('*')<<setw(20)<<setprecision(10)<<left<<PI<<endl; cout<<scientific<<setprecision(10)<<PI<<endl; cout<<scientific<<uppercase<<setprecision(10)<<PI<<endl; return 0 ;
}
输出结果如下:
3.141592654
3.1
*******3.1415926540
3.1415926540*******
3.1415926540e+000
3.1415926540E+000
4.iomanip文件核心内容
struct _Resetiosflags { ios_base::fmtflags _M_mask; };/*** @brief Manipulator for @c setf.* @param mask A format flags mask.** Sent to a stream object, this manipulator resets the specified flags,* via @e stream.setf(0,mask).*/inline _Resetiosflags resetiosflags(ios_base::fmtflags __mask){ _Resetiosflags __x; __x._M_mask = __mask; return __x; }template<typename _CharT, typename _Traits>inline basic_istream<_CharT,_Traits>& operator>>(basic_istream<_CharT,_Traits>& __is, _Resetiosflags __f){ __is.setf(ios_base::fmtflags(0), __f._M_mask); return __is; }template<typename _CharT, typename _Traits>inline basic_ostream<_CharT,_Traits>& operator<<(basic_ostream<_CharT,_Traits>& __os, _Resetiosflags __f){ __os.setf(ios_base::fmtflags(0), __f._M_mask); return __os; }struct _Setiosflags { ios_base::fmtflags _M_mask; };/*** @brief Manipulator for @c setf.* @param mask A format flags mask.** Sent to a stream object, this manipulator sets the format flags* to @a mask.*/inline _Setiosflags setiosflags(ios_base::fmtflags __mask){ _Setiosflags __x; __x._M_mask = __mask; return __x; }template<typename _CharT, typename _Traits>inline basic_istream<_CharT,_Traits>& operator>>(basic_istream<_CharT,_Traits>& __is, _Setiosflags __f){ __is.setf(__f._M_mask); return __is; }template<typename _CharT, typename _Traits>inline basic_ostream<_CharT,_Traits>& operator<<(basic_ostream<_CharT,_Traits>& __os, _Setiosflags __f){ __os.setf(__f._M_mask); return __os; }struct _Setbase { int _M_base; };/*** @brief Manipulator for @c setf.* @param base A numeric base.** Sent to a stream object, this manipulator changes the* @c ios_base::basefield flags to @c oct, @c dec, or @c hex when @a base* is 8, 10, or 16, accordingly, and to 0 if @a base is any other value.*/inline _Setbase setbase(int __base){ _Setbase __x; __x._M_base = __base; return __x; }template<typename _CharT, typename _Traits>inline basic_istream<_CharT,_Traits>& operator>>(basic_istream<_CharT,_Traits>& __is, _Setbase __f){__is.setf(__f._M_base == 8 ? ios_base::oct : __f._M_base == 10 ? ios_base::dec : __f._M_base == 16 ? ios_base::hex : ios_base::fmtflags(0), ios_base::basefield);return __is; }template<typename _CharT, typename _Traits>inline basic_ostream<_CharT,_Traits>& operator<<(basic_ostream<_CharT,_Traits>& __os, _Setbase __f){__os.setf(__f._M_base == 8 ? ios_base::oct : __f._M_base == 10 ? ios_base::dec : __f._M_base == 16 ? ios_base::hex : ios_base::fmtflags(0), ios_base::basefield);return __os; }template<typename _CharT> struct _Setfill { _CharT _M_c; };/*** @brief Manipulator for @c fill.* @param c The new fill character.** Sent to a stream object, this manipulator calls @c fill(c) for that* object.*/template<typename _CharT> inline _Setfill<_CharT> setfill(_CharT __c){ _Setfill<_CharT> __x; __x._M_c = __c; return __x; }template<typename _CharT, typename _Traits>inline basic_istream<_CharT,_Traits>& operator>>(basic_istream<_CharT,_Traits>& __is, _Setfill<_CharT> __f){ __is.fill(__f._M_c); return __is; }template<typename _CharT, typename _Traits>inline basic_ostream<_CharT,_Traits>& operator<<(basic_ostream<_CharT,_Traits>& __os, _Setfill<_CharT> __f){ __os.fill(__f._M_c); return __os; }struct _Setprecision { int _M_n; };/*** @brief Manipulator for @c precision.* @param n The new precision.** Sent to a stream object, this manipulator calls @c precision(n) for* that object.*/inline _Setprecision setprecision(int __n){ _Setprecision __x; __x._M_n = __n; return __x; }template<typename _CharT, typename _Traits>inline basic_istream<_CharT,_Traits>& operator>>(basic_istream<_CharT,_Traits>& __is, _Setprecision __f){ __is.precision(__f._M_n); return __is; }template<typename _CharT, typename _Traits>inline basic_ostream<_CharT,_Traits>& operator<<(basic_ostream<_CharT,_Traits>& __os, _Setprecision __f){ __os.precision(__f._M_n); return __os; }struct _Setw { int _M_n; };/*** @brief Manipulator for @c width.* @param n The new width.** Sent to a stream object, this manipulator calls @c width(n) for* that object.*/inline _Setw setw(int __n){ _Setw __x; __x._M_n = __n; return __x; }template<typename _CharT, typename _Traits>inline basic_istream<_CharT,_Traits>& operator>>(basic_istream<_CharT,_Traits>& __is, _Setw __f){ __is.width(__f._M_n); return __is; }template<typename _CharT, typename _Traits>inline basic_ostream<_CharT,_Traits>& operator<<(basic_ostream<_CharT,_Traits>& __os, _Setw __f){ __os.width(__f._M_n); return __os; }
C++标准库——iomanip相关推荐
- c++标准库 及 命名空间std
1.命名空间std C++标准中引入命名空间的概念,是为了解决不同模块或者函数库中相同标识符冲突的问题.有了命名空间的概念,标识符就被限制在特定的范围(函数)内,不会引起命名冲突.最典型的例子就是st ...
- C++标准库简介(转)
C++标准库的所有头文件都没有扩展名.C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能. <cname>形式的标准头文件[ <complex>例外]其 ...
- 《C++标准库》学习笔记 — STL —流
<C++标准库>学习笔记 - STL -流 一.操控器 1.原理 2.自定义操控器 3.控制输入的宽度 二.自定义 I/O 操作符 1.重载输出操作符 2.输入操作符 三.自定义格式化标志 ...
- C++ 标准库(C++ Standary Library)
可能有很多像我一样的同学,用C++工作了很久,一直用的都是mfc或者qt,在编写代码时,用的都是c......或者q......等库.好处是,库封装了很多方法,方便实用.不好之处是,代码复用性,和可移 ...
- C++ 标准库概览(一分钟就看完了)
C++ 标准库以若干头文件的方式提供. 下面简单介绍一个各头文件的内容. 第一部分 容器 Containers C++11 新增.提供了容器类模板 std::array,固定大小数组的容器. 提供了专 ...
- C++ Primer 学习笔记 第十七章 标准库特殊设施
标准库特殊设施 637 初始化tuple #include <iostream> #include <vector> #include <string> #incl ...
- C++著名类库和C++标准库介绍
C++著名类库 1.C++各大有名库的介绍--C++标准库 2.C++各大有名库的介绍--准标准库Boost 3.C++各大有名库的介绍--GUI 4.C++各大有名库的介绍--网络通信 5. ...
- 【C++标准库】std::string用法指南源码剖析
文章目录 1.ASCII码 (1)计算机如何表达字符 2.C 语言中的字符类型 char (1)思想:char 即整数 (3)C 语言帮手函数 (4)C语言中的字符串 (4)C 语言转义符 3.C++ ...
- C++标准库和标准模板库(转)
转自原文http://blog.csdn.net/sxhelijian/article/details/7552499 C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标 ...
最新文章
- 商汤科技总裁张文谈人工智能: 未来10年到20年会有巨大爆发 下一个井喷是AI+教育
- converter 迁移xen server 上的虚拟机 到 wmware esxi
- SGU 117 Counting
- SAP Fiori应用里Cross Application跳转的一些常见错误
- Logging with ElasticSearch, Kibana, ASP.NET Core and Docker
- 【MFC系列-第8天】小型软件项目开发
- 浅谈.Net版(C#)的CMP模式
- 两点间最短路 java_AcWing 850. Dijkstra求最短路 II_Java实现含详细注释
- xCode 安装Mobile Device Framework出错的问题的解决方法
- thinkphp3.2.3漏洞_Chrome新版本修复CVE202015999 0 day漏洞
- C++11 static_assert
- 【Gym-101908 L】Subway Lines【树上两条路径交】
- 小白到学会python要多久_零基础小白多久能学会python
- vmware 架设网站无法打开解决办法
- 国内IT运维管理软件五大发展趋势
- 基于pgpool-II读写分离+postgresql10主从从流复制高可用部署方案
- 第一卷 第一百三十六章 好白菜
- 微信分享的app下载链接无法打开,显示已停止访问该网页的原因和解决方案
- 用HTML+CSS做一个简单好看的汽车网页
- Astyle格式说明