Espacios de nombres
Variantes
Acciones

std::ios_base::width

De cppreference.com
< cpp‎ | io‎ | ios base
 
 
Biblioteca de E/S
Manipuladores de E/S
E/S estilo C
Búferes
(en desuso en C++98)
Flujos
Abstracciones
E/S de archivos
E/S de cadenas
E/S de arrays
(en desuso en C++98)
(en desuso en C++98)
(en desuso en C++98)
Salida sincronizada
Tipos
Interfaz de categoría de error
(C++11)
 
 
streamsize width() const;
(1)
streamsize width( streamsize new_width );
(2)

Gestiona el número mínimo de caracteres para generar en ciertas operaciones de salida y el número máximo de caracteres para generar en ciertas operaciones de entrada.

1) Devuelve el ancho de campo actual.
2) Establece el ancho de campo en el dado. Devuelve el ancho de campo anterior.

Contenido

[editar] Parámetros

new_width - El nuevo valor del ancho de campo.

[editar] Valor de retorno

El ancho del campo antes de la llamada a la función.

[editar] Notas

Algunas funciones de E/S llaman a width(0) antes de retornar, consúltese std::setw (esto da como resultado que este campo tenga efecto solo en la siguiente función de E/S, y no en cualquier E/S posterior).

Los efectos exactos que tiene este modificador en la entrada y la salida varían entre las funciones de E/S individuales y se describen en cada página de sobrecarga de operator<< y operator>> individualmente.

[editar] Ejemplo

#include <algorithm>
#include <array>
#include <chrono>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <string>
 
std::string str(std::chrono::year_month_day ymd)
{
    std::ostringstream out;
#if CHRONO_COUT_IMPLEMENTED
    out << ymd;
#else
    out.fill('0');
    out.width(4);
    out << static_cast<int>(ymd.year()) << '/';
    out.width(2);
    out << static_cast<unsigned>(ymd.month()) << '/';
    out.width(2);
    out << static_cast<unsigned>(ymd.day());
    out.fill(' ');
#endif
    return out.str();
};
 
int main()
{
    using namespace std::literals;
 
    constexpr int column_size = 4;
    using table_t = std::array<std::string, column_size>;
 
    const auto data = std::to_array<table_t>
    ({
        { "Lenguaje", "Autor", "Cumpleaños", "Defunción" }, // encabezado
        { "C", "Dennis Ritchie", str(1941y/9/9d), str(2011y/10/12d) },
        { "C++", "Bjarne Stroustrup", str(1950y/12/30d), {} },
        { "C#", "Anders Hejlsberg", str(1960y/12/2d), {} },
        { "Python", "Guido van Rossum", str(1956y/1/31d), {} },
        { "Javascript", "Brendan Eich", str(1961y/7/4d), {} },
    });
 
    const auto cols_w = [&data] // calcular la anchura de cada columna
    {
        std::array<int, column_size> width;
        width.fill(0);
        for (auto const& row : data)
            for (auto i{0UZ}; i != row.size(); ++i)
                if (width[i] < static_cast<int>(row[i].size()) + 2)
                    width[i] = static_cast<int>(row[i].size()) + 2;
        return width;
    }(); // IILE
 
    auto print_line = [&cols_w](table_t const& tbl)
    {
        std::cout << '|';
        for (auto i{0UZ}; auto const& str : tbl)
        {
            std::cout.width(cols_w[i++]);
            std::cout << (' ' + str) << '|';
        }
        std::cout << '\n';
    };
 
    auto print_break = [&cols_w]
    {
        std::cout.put('+').fill('-');
        std::ranges::for_each(cols_w, [](int w)
        {
            std::cout.width(w);
            std::cout << '-' << '+';
        });
        std::cout.put('\n').fill(' ');
    };
 
    std::cout.setf(std::ios::left, std::ios::adjustfield);
    print_break();
    for (bool header{true}; auto const& entry : data)
    {
        print_line(entry);
        if (header)
        {
            print_break();
            header = false;
        }
    }
    print_break();
}

Salida:

+------------+-------------------+------------+------------+
| Lenguaje   | Autor             | Cumpleaños | Defunción  |
+------------+-------------------+------------+------------+
| 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 |            |
+------------+-------------------+------------+------------+

[editar] Véase también

Gestiona la precisión decimal de las operaciones de punto flotante.
(función miembro pública) [editar]
Cambia el ancho del siguiente campo de entrada/salida.
(función) [editar]