Defination

In C++, stream manipulators are tools that allow you to control the formatting and behavior of input and output streams. They are used with the stream insertion (<<) and stream extraction (>>) operators to modify how data is displayed or read from streams. Stream manipulators are part of the iomanip header and can be used with both standard I/O streams (cin, cout) and user-defined streams.

Stream manipulators are typically functions that take a stream as input and return a modified stream. They can be classified into two categories: formatting manipulators and state manipulators.

Formatting Manipulators: Formatting manipulators control the appearance of data during output operations. They modify the way data is presented when it is sent to a stream. Some common formatting manipulators include- std::setw(int n), std::setprecision(int n), std::setfill(char c)-(Sets the character used for padding when using std::setw), std::left and std::right, std::fixed and std::scientific etc.

State Manipulators: State manipulators modify the state of the stream. They can change various flags that control the behavior of the stream. Some common state manipulators include: std::endl(Inserts a new line character and flushes the output buffer), std::flush(Flushes the output buffer without inserting a new line character), std::boolalpha and std::noboolalpha, std::showpos and std::noshowpos etc.

Explanation of some stream manipulators

Here’s a brief explanation of some commonly used stream manipulators:

  1. setw(n): Sets the width of the output field to n. When used with the ‘<<‘ operator, it ensures that the output occupies at least ‘n’ characters by padding with spaces as needed.
  2. setprecision(n): Sets the number of digits of precision to display when outputting floating-point numbers. For example, setprecision(3) will display a floating-point number with three decimal places.
  3. fixed: Ensures that floating-point numbers are displayed in fixed-point notation (with a fixed number of decimal places) instead of scientific notation.
  4. scientific: Ensures that floating-point numbers are displayed in scientific notation.
  5. left: Aligns the output to the left within the specified width. It is often used in conjunction with setw() to control the alignment of data in the output.
  6. right: Aligns the output to the right within the specified width. It is the default alignment for most data types.
  7. boolalpha: Outputs boolean values as “true” or “false” instead of 1 or 0.
  8. showpoint: Always shows the decimal point and trailing zeros for floating-point numbers, even if they are not necessary.
  9. setfill(c): Sets the padding character to ‘c’. It is used with setw() to specify the character used for padding.
  10. std::uppercase: Converts alphabetic characters to uppercase.
  11. std::nouppercase: Disables the conversion of alphabetic characters to uppercase.

These are just a few examples of the many stream manipulators available in C++. You can combine them to achieve complex formatting or to improve the presentation of your data in the output streams. Remember to include the <iomanip> header to use these manipulators in your C++ programs. Here’s an example of how to use some manipulators:

#include <iostream>
#include <iomanip>

int main() {
    int num = 42;
    double pi = 3.1415926;
    
    std::cout << "Default: " << num << " " << pi << std::endl;
    std::cout << "setw(10): " << std::setw(10) << num << " " << std::setw(10) << pi << std::endl;
    std::cout << "setprecision(3): " << std::setprecision(3) << pi << std::endl;
    std::cout << "fixed: " << std::fixed << pi << std::endl;
    std::cout << "scientific: " << std::scientific << pi << std::endl;
    std::cout << "left: " << std::left << std::setw(10) << num << std::setw(10) << pi << std::endl;
    std::cout << "right: " << std::right << std::setw(10) << num << std::setw(10) << pi << std::endl;
    
    return 0;
}

Output:

Default: 42 3.14159
setw(10):         42  3.14159
setprecision(3): 3.14
fixed: 3.141593
scientific: 3.141593e+00
left: 42        3.14159
right:         42  3.14159

As you can see, using stream manipulators can significantly enhance the readability and formatting of your output. Each stream manipulator remains in effect for subsequent output operations unless it is modified by another manipulator. Remember to include the <iomanip> header to access the manipulators, as shown in the example above.


more related content on Object Oriented Programming

JOIN OUR NEWSLETTER
And get notified everytime we publish a new blog post.