std::ios_base:: width
      From cppreference.net
     
     
     | 
           
            streamsize width
            
             (
            
            
             )
            
            
             const
            
            
             ;
            
           
           | (1) | |
| 
           
            streamsize width
            
             (
            
            streamsize new_width
            
             )
            
            
             ;
            
           
           | (2) | |
管理某些输出操作中生成的最小字符数以及某些输入操作中生成的最大字符数。
       
        1)
       
       返回当前字段宽度。
      
      
       
        2)
       
       将字段宽度设置为指定值。返回之前的字段宽度。
      
      | 目录 | 
参数
| new_width | - | 新字段宽度设置 | 
返回值
函数调用前的字段宽度。
注释
某些I/O函数在返回前会调用 width ( 0 ) ,详见 std::setw (这导致该字段仅对下一个I/O函数生效,而不会影响后续的任何I/O操作)。
       该修饰符对输入和输出的具体影响因各个I/O函数而异,具体描述详见每个
       
        operator<<
       
       和
       
        operator>>
       
       重载页面的单独说明。
      
示例
         运行此代码
        
       #include <algorithm> #include <array> #include <iomanip> #include <iostream> #include <span> #include <string_view> using namespace std::string_view_literals; constexpr std::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()>; constexpr std::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) { const std::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); }
输出:
+------------+-------------------+------------+------------+ | 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 | | +------------+-------------------+------------+------------+
参见
| 管理浮点运算的十进制精度 (公开成员函数) | |
| 更改下一个输入/输出字段的宽度 (函数) |