Namensräume
Varianten
Aktionen

std::ios_base::width

Von cppreference.com
< cpp‎ | io‎ | ios base
 
 
 
 
streamsize width() const;
(1)
streamsize width( streamsize new_width );
(2)

Verwaltet die minimale Anzahl von Zeichen, die bei bestimmten Ausgabeoperationen erzeugt werden, und die maximale Anzahl von Zeichen, die bei bestimmten Eingabeoperationen erzeugt werden.

1) Gibt die aktuelle Feldbreite zurück.
2) Setzt die Feldbreite auf den angegebenen Wert. Gibt die vorherige Feldbreite zurück.

Inhalt

[bearbeiten] Parameter

new_width - neue Einstellung der Feldbreite

[bearbeiten] Rückgabewert

Die Feldbreite vor dem Aufruf der Funktion.

[bearbeiten] Hinweise

Einige I/O-Funktionen rufen width(0) auf, bevor sie zurückkehren. Siehe std::setw (dies führt dazu, dass dieses Feld nur auf die nächste I/O-Funktion und nicht auf nachfolgende I/Os wirkt).

Die genauen Auswirkungen dieses Modifikators auf die Ein- und Ausgabe variieren zwischen den einzelnen I/O-Funktionen und werden auf jeder Seite der `operator<<` und `operator>>` Überladung einzeln beschrieben.

[bearbeiten] Beispiel

#include <algorithm>
#include <array>
#include <iomanip>
#include <iostream>
#include <span>
#include <string_view>
using namespace std::string_view_literals;
 
constexpr std::array table_header =
{
    "Language"sv, "Author"sv, "Birthdate"sv, "RIP date"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);
}

Ausgabe

+------------+-------------------+------------+------------+
| Language   | Author            | Birthdate  | RIP date   |
+------------+-------------------+------------+------------+
| 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 |            |
+------------+-------------------+------------+------------+

[bearbeiten] Siehe auch

verwaltet die Dezimalgenauigkeit von Fließkommaoperationen
(public member function) [bearbeiten]
Ändert die Breite des nächsten Eingabe-/Ausgabefeldes
(Funktion) [bearbeiten]