std::ios_base::width

来自cppreference.com
< cpp‎ | io‎ | ios base
 
 
 
 
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 <array>
#include <tuple>
#include <ctime>
#include <string>
#include <iostream>
#include <sstream>
#include <iomanip>
 
int main()
{
    auto str_time = [](int year, int mon, int day)
    {
        constexpr std::array<const char*, 7> week_day{ {
            "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
        } };
 
        std::tm tm{};
        tm.tm_year = year - 1900;
        tm.tm_mon  = mon - 1;
        tm.tm_mday = day;
 
        day += mon < 3 ? year-- : year - 2;
        tm.tm_wday = (23 * mon / 9 + day + 4 + year / 4 - year / 100 + year / 400) % 7;
 
        std::ostringstream out;
        out << week_day[tm.tm_wday] << ", " << std::put_time(&tm, "%B %d, %Y");
        return out.str();
    };
 
    constexpr int column_size = 4;
    using table_t = std::array<std::string, column_size>;
 
    table_t headers{ { "Name", "Birthdate", "Death date", "Language Created" } };
 
    std::array<table_t, 5> data{ {
        { { "Dennis MacAlistair Ritchie", str_time(1941, 9, 9), str_time(2011, 10, 12), "C" } },
        { { "Bjarne Stroustrup", str_time(1950, 12, 30), "", "C++" } },
        { { "Anders Hejlsberg", str_time(1960, 12, 2), "", "C#" } },
        { { "Guido van Rossum", str_time(1956, 1, 31), "", "Python" } },
        { { "Brendan Eich", str_time(1961, 7, 4), "", "Javascript" } }
    } };
 
    constexpr int name_wid  = 30;
    constexpr int birth_wid = 30;
    constexpr int death_wid = 30;
    constexpr int lang_wid  = 18;
 
    auto print_line = [](table_t const &tbl)
    {
 
        auto const &[Name, Birthdate, DeathDate, LanguageCreated] = tbl;
 
        std::cout.width(name_wid);
        std::cout << ("| " + Name) << '|';
 
        std::cout.width(birth_wid);
        std::cout << (' ' + Birthdate) << '|';
 
        std::cout.width(death_wid);
        std::cout << (' ' + DeathDate) << '|';
 
        std::cout.width(lang_wid);
        std::cout << (' ' + LanguageCreated) << '|';
 
        std::cout << '\n';
    };
 
    constexpr int total_wid = name_wid + birth_wid + death_wid + lang_wid + column_size;
 
    auto print_break = []
    {
        std::cout.width(total_wid);
        std::cout.fill('-');
        std::cout << '-' << std::endl;
        std::cout.fill(' ');
    };
 
    std::cout.setf(std::ios::left, std::ios::adjustfield);
    print_break();
    print_line(headers);
    print_break();
    for (auto const &entry : data)
        print_line(entry);
    print_break();
}

输出:

----------------------------------------------------------------------------------------------------------------
| Name                        | Birthdate                    | Death date                   | Language Created |
----------------------------------------------------------------------------------------------------------------
| Dennis MacAlistair Ritchie  | Tuesday, September 09, 1941  | Wednesday, October 12, 2011  | C                |
| Bjarne Stroustrup           | Saturday, December 30, 1950  |                              | C++              |
| Anders Hejlsberg            | Friday, December 02, 1960    |                              | C#               |
| Guido van Rossum            | Tuesday, January 31, 1956    |                              | Python           |
| Brendan Eich                | Tuesday, July 04, 1961       |                              | Javascript       |
----------------------------------------------------------------------------------------------------------------

参阅

管理浮点操作的精度
(公开成员函数)