std::ios_base::width
De cppreference.com
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
Ejecuta este código
#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) | |
Cambia el ancho del siguiente campo de entrada/salida. (función) |