操纵符
在 C++ 中,操纵符 (Manipulators) 是一类特殊的函数或对象,它们被设计用来改变输入流(istream)或输出流(ostream)的状态或格式。
通过将操纵符插入流中,我们可以精确控制数据的显示方式(如进制、精度、对齐等)。
操纵符速查表
1. 字段、对齐与填充 (Field & Alignment)
| 操纵符 | 所属头文件 | 功能 | 持久性 |
|---|
std::setw(n) | <iomanip> | 设置下一个输出项的最小宽度为 n | 非持久 |
std::setfill(c) | <iomanip> | 设置填充字符为 c (配合 setw 使用) | 持久 |
std::left | <iostream> | 左对齐(在右侧填充) | 持久 |
std::right | <iostream> | 右对齐(在左侧填充,默认) | 持久 |
std::internal | <iostream> | 在符号和数字中间填充 | 持久 |
2. 整数与进制 (Integer & Radix)
| 操纵符 | 所属头文件 | 功能 | 持久性 |
|---|
std::dec | <iostream> | 十进制输出(默认) | 持久 |
std::hex | <iostream> | 十六进制输出 | 持久 |
std::oct | <iostream> | 八进制输出 | 持久 |
std::setbase(n) | <iomanip> | 设置进制 (n=8, 10, 16) | 持久 |
std::showbase | <iostream> | 输出前缀 (0x/0/无) | 持久 |
std::noshowbase | <iostream> | 关闭显示进制前缀 | 持久 |
3. 浮点数格式 (Floating Point)
| 操纵符 | 所属头文件 | 功能 | 持久性 |
|---|
std::setprecision(n) | <iomanip> | 设置有效数字/小数位数 | 持久 |
std::fixed | <iostream> | 使用定点法(小数点后位数) | 持久 |
std::scientific | <iostream> | 使用科学计数法 | 持久 |
std::defaultfloat | <iostream> | 恢复默认浮点格式 | 持久 |
std::showpoint | <iostream> | 即使小数部分为0也显示小数点 | 持久 |
4. 布尔值与标识开关 (Booleans & Flags)
| 操纵符 | 所属头文件 | 功能 | 持久性 |
|---|
std::boolalpha | <iostream> | 布尔显示为 true/false | 持久 |
std::noboolalpha | <iostream> | 布尔显示为 1/0 | 持久 |
std::showpos | <iostream> | 显示正号(+) | 持久 |
std::uppercase | <iostream> | 字母(如十六进制/科学计数法)大写 | 持久 |
std::noshowpos | <iostream> | 取消显示正号(+) | 持久 |
5. 进阶与特殊操纵符 (Advanced)
| 操纵符 | 所属头文件 | 功能 | 持久性 |
|---|
std::quoted(s) | <iomanip> | (C++14) 给字符串加引号并转义 | 非持久 |
std::ws | <iostream> | 跳过前导空白符(输入流专用) | 一次性 |
std::endl | <iostream> | 换行并刷新缓冲区 | 一次性 |
std::flush | <iostream> | 仅刷新缓冲区 | 一次性 |
std::setiosflags(mask) | <iomanip> | 开启特定位标识 (如 ios::hex) | 持久 |
std::resetiosflags(mask) | <iomanip> | 关闭特定位标识 | 持久 |