iomanip是w:C++标准程式库中的一个w:头文件,定义了C++标准中的流输入输出的有参数的操纵器(monipulator)。

流的操纵器(monipulator),无参例子:

std::ostream& imbueFacet(std::ostream& ostream)
{
    ostream.imbue(std::locale{ ostream.getloc(), new custom_facet{} });

    return ostream;
}

概述

编辑
  • C++98
    • resetiosflags : 重置输入或输出流的格式化标记。
    • setiosflags : 设置输入或输出流的格式化标价。
    • setbase : 设置进制,支持8进制、10进制、16进制。
    • setfill : 设置std::setw将填充什么样的字符,如:std::setfill('*')
    • setprecision : 设置浮点数的精度。
    • setw : 设置填充多少个字符,默认填充的字符为' '空格。 setw 只为紧随其后的值建立一个字段宽度。打印该值后,流将回到其默认的打印方式。
  • C++11:用于在输入流或输出流中,按照浸染的locale以及给定的格式化字符串fmt,分析输入/输出的字符形式的时间值或金额,存储在相应的结构变量中。注意,money用long double或string类型表示,并且是包括了辅币的整型值,例如$1.23实际表示为123.
    • get_money : 根据本地设置,从输入流中提取money值。
    • put_money : 根据本地设置,输出money值。
    • get_time : 根据本地设置,从输入流中提取time值。
    • put_time : 根据本地设置,输出time值。
  • C++14
    • quoted : 输入或输出引号括起来的字符 (quoted string,例如,XML和CSV格式的字符串)。能够确保带有嵌入空格的字符串在提取和插入的时候内容保持不变(skipws标志被关闭)。字符串中的转义字符被正确处理。
  • 在<ios>头文件中,还有:
    • std::boolalpha, std::noboolalpha 布尔值是显示为0和1(默认)还是显示为文本形式
    • std::showbase, std::noshowbase整数输出是否显式基数前缀如0x
    • showpoint,noshowpoint 浮点数是否总是显式小数点
    • showpos,noshowpos 非负数是否总是显式 + 号
    • skipws,noskipws 输入时是否跳过前导空格
    • uppercase,nouppercase 输出时是否大写字符
    • unitbuf,nounitbuf 每次输出是否自动刷新缓冲区
    • internal,left,right 填充时的中、左、右对齐
    • dec,hex,oct 数值输入输出的进制
    • fixed,scientific,hexfloat,defaultfloat 数值输入输出的格式
  • <istream>头文件中:
    • ws 消耗空格
  • <ostream>头文件中:
    • ends 输出'\0'
    • flush 刷新输出流
    • endl 输出'\n'并刷新输出流
    • emit_on_flush,noemit_on_flush C++20,控制流的basic_syncbuf在刷新时是否emit
    • flush_emit C++20 flushes a stream and emits the content if it is using a basic_syncbuf

例子

编辑
#include <iostream>
#include <sstream>
#include <locale>
#include <iomanip>
 
int main()
{
    std::tm t = {};
    std::istringstream ss("2011-Februar-18 23:12:34");
    ss.imbue(std::locale("de_DE.utf-8"));
    ss >> std::get_time(&t, "%Y-%b-%d %H:%M:%S");
    if (ss.fail()) {
        std::cout << "Parse failed\n";
    } else {
        std::cout << std::put_time(&t, "%c") << '\n';
    }
}

可能的输出:

Sun Feb 18 23:12:34 2011