Namespaces
Variants

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 =
{
    "언어"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)