I/O manipulators | ||||
Print functions(C++23) | ||||
C-style I/O | ||||
Buffers | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++20) | ||||
Streams | ||||
Abstractions | ||||
File I/O | ||||
String I/O | ||||
Array I/O | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
Synchronized Output | ||||
(C++20) | ||||
Types | ||||
Error category interface | ||||
(C++11) | ||||
(C++11) |
Member functions | ||||
Formatting | ||||
ios_base::width | ||||
Locales | ||||
Internal extensible array | ||||
Miscellaneous | ||||
Member classes | ||||
Member types | ||||
streamsize width()const; | (1) | |
streamsize width( streamsize new_width); | (2) | |
Manages the minimum number of characters to generate on certain output operations and the maximum number of characters to generate on certain input operations.
Contents |
new_width | - | new field width setting |
The field width before the call to the function.
Some I/O functions callwidth(0) before returning, seestd::setw (this results in this field having effect on the next I/O function only, and not on any subsequent I/O).
The exact effects this modifier has on the input and output vary between the individual I/O functions and are described at eachoperator<<
andoperator>>
overload page individually.
#include <algorithm>#include <array>#include <iomanip>#include <iostream>#include <span>#include <string_view>usingnamespace std::string_view_literals; constexprstd::array table_header={"Language"sv,"Author"sv,"Birthdate"sv,"RIP date"sv}; using row_t=std::array<std::string_view, table_header.size()>;using widths_t=std::array<std::size_t, table_header.size()>; constexprstd::array table_body=std::to_array<row_t>({{"C","Dennis Ritchie","1941-09-09","2011-10-12"},{"C++","Bjarne Stroustrup","1950-12-30"},{"C#","Anders Hejlsberg","1960-12-02"},{"Python","Guido van Rossum","1956-01-31"},{"Javascript","Brendan Eich","1961-07-04"}}); constexpr widths_t calculate_column_widths(std::span<const row_t> table){ widths_t widths{};for(const row_t& row: table)for(size_t i=0; i!= row.size();++i) widths[i]=std::max(widths[i], row[i].size());return widths;} void print_row(const row_t& row,const widths_t& widths){std::cout<<'|';for(size_t i=0; i!= row.size();++i){std::cout<<' ';std::cout.width(widths[i]);std::cout<< row[i]<<" |";}std::cout<<'\n';}; void print_break(const widths_t& widths){conststd::size_t margin=1;std::cout.put('+').fill('-');for(std::size_t w: widths){std::cout.width(w+ margin*2);std::cout<<'-'<<'+';}std::cout.put('\n').fill(' ');}; int main(){constexpr widths_t widths= calculate_column_widths(table_body); std::cout.setf(std::ios::left, std::ios::adjustfield); print_break(widths); print_row(table_header, widths); print_break(widths);for(const row_t& row: table_body) print_row(row, widths); print_break(widths);}
Output:
+------------+-------------------+------------+------------+| Language | Author | Birthdate | RIP date |+------------+-------------------+------------+------------+| C | Dennis Ritchie | 1941-09-09 | 2011-10-12 || C++ | Bjarne Stroustrup | 1950-12-30 | || C# | Anders Hejlsberg | 1960-12-02 | || Python | Guido van Rossum | 1956-01-31 | || Javascript | Brendan Eich | 1961-07-04 | |+------------+-------------------+------------+------------+
manages decimal precision of floating point operations (public member function)[edit] | |
changes the width of the next input/output field (function)[edit] |