Stream Manipulators (bộ điều khiển luồng) là các hàm được thiết kế đặc biệt để dùng kết hợp với toán tử chèn (<<) và trích xuất (>>) trên đối tượng luồng (stream objects), ví dụ:
std::cout << std::setw(10);
Chúng vẫn là các hàm thông thường và cũng có thể gọi như hàm khác với đối tượng luồng làm đối số, ví dụ:
boolalpha(cout);
Manipulators dùng để thay đổi tham số định dạng trên luồng và chèn/trích xuất các ký tự đặc biệt.
Dưới đây là một số manipulators C++ phổ biến nhất:
endl
Manipulator này có chức năng giống '\n' (ký tự xuống dòng). Nhưng nó cũng xóa bộ đệm (flush) luồng xuất.
Ví dụ
#include <iostream>
int main() {
std::cout << "Hello" << std::endl << "World!";
}
Kết quả
Hello World!
showpoint / noshowpoint
Manipulator này kiểm soát việc có luôn hiển thị dấu thập phân trong biểu diễn số thực hay không.
Ví dụ
#include <iostream>
int main() {
std::cout << "1.0 with showpoint: " << std::showpoint << 1.0 << '\n'
<< "1.0 with noshowpoint: " << std::noshowpoint << 1.0 << '\n';
}
Kết quả
1.0 with showpoint: 1.00000 1.0 with noshowpoint: 1
setprecision
Manipulator này thay đổi độ chính xác số thực. Khi dùng trong biểu thức out << setprecision(n) hoặc in >> setprecision(n), thiết lập tham số độ chính xác của luồng out hoặc in chính xác bằng n.
Ví dụ
#include <iostream>
#include <iomanip>
int main() {
const long double pi = 3.141592653589793239;
std::cout << "default precision (6): " << pi << '\n'
<< "std::setprecision(10): " << std::setprecision(10) << pi << '\n';
}
Kết quả
default precision (6): 3.14159 std::setprecision(10): 3.141592654
setw
Manipulator này thay đổi độ rộng của trường nhập/xuất tiếp theo. Khi dùng trong biểu thức out << setw(n) hoặc in >> setw(n), thiết lập tham số độ rộng của luồng out hoặc in chính xác bằng n.
Ví dụ
#include <iostream>
#include <iomanip>
int main() {
std::cout << "no setw:" << 42 << '\n'
<< "setw(6):" << std::setw(6) << 42 << '\n'
<< "setw(6), several elements: " << 89 << std::setw(6) << 12 << 34 << '\n';
}
Kết quả
no setw:42 setw(6): 42 setw(6), several elements: 89 1234