Namespaces
Variants

std::ios_base:: width

From cppreference.net
streamsize width ( ) const ;
(1)
streamsize width ( streamsize new_width ) ;
(2)
**Примечание:** В данном случае весь текст внутри тегов ` ` является C++ кодом, поэтому не подлежит переводу согласно указанным правилам. Числовые обозначения (1) и (2) также оставлены без изменений как часть формата документации.

Управляет минимальным количеством символов для генерации при определенных операциях вывода и максимальным количеством символов для генерации при определенных операциях ввода.

1) Возвращает текущую ширину поля.
2) Устанавливает ширину поля в заданное значение. Возвращает предыдущую ширину поля.

Содержание

Параметры

new_width - новая установка ширины поля

Возвращаемое значение

Ширина поля перед вызовом функции.

Примечания

Некоторые функции ввода-вывода вызывают width ( 0 ) перед возвратом, см. std::setw (это приводит к тому, что данное поле влияет только на следующую функцию ввода-вывода, но не на любые последующие операции ввода-вывода).

Точные эффекты, которые этот модификатор оказывает на ввод и вывод, различаются между отдельными функциями ввода-вывода и описаны на каждой 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 =
{
    "Язык"sv, "Автор"sv, "Дата рождения"sv, "Дата смерти"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);
}

Вывод:

+------------+-------------------+------------+------------+
| Язык       | Автор             | Дата рождения | Дата смерти |
+------------+-------------------+------------+------------+
| 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 |            |
+------------+-------------------+------------+------------+

Смотрите также

управляет десятичной точностью операций с плавающей точкой
(public member function)
изменяет ширину следующего поля ввода/вывода
(function)