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