std::ios_base::width
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 <array> #include <tuple> #include <ctime> #include <string> #include <iostream> #include <sstream> #include <iomanip> int main() { auto str_time = [](int year, int mon, int day) { constexpr std::array<const char*, 7> week_day{ { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" } }; std::tm tm{}; tm.tm_year = year - 1900; tm.tm_mon = mon - 1; tm.tm_mday = day; day += mon < 3 ? year-- : year - 2; tm.tm_wday = (23 * mon / 9 + day + 4 + year / 4 - year / 100 + year / 400) % 7; std::ostringstream out; out << week_day[tm.tm_wday] << ", " << std::put_time(&tm, "%B %d, %Y"); return out.str(); }; constexpr int column_size = 4; using table_t = std::array<std::string, column_size>; table_t headers{ { "Name", "Birthdate", "Death date", "Language Created" } }; std::array<table_t, 5> data{ { { { "Dennis MacAlistair Ritchie", str_time(1941, 9, 9), str_time(2011, 10, 12), "C" } }, { { "Bjarne Stroustrup", str_time(1950, 12, 30), "", "C++" } }, { { "Anders Hejlsberg", str_time(1960, 12, 2), "", "C#" } }, { { "Guido van Rossum", str_time(1956, 1, 31), "", "Python" } }, { { "Brendan Eich", str_time(1961, 7, 4), "", "Javascript" } } } }; constexpr int name_wid = 30; constexpr int birth_wid = 30; constexpr int death_wid = 30; constexpr int lang_wid = 18; auto print_line = [](table_t const &tbl) { auto const &[Name, Birthdate, DeathDate, LanguageCreated] = tbl; std::cout.width(name_wid); std::cout << ("| " + Name) << '|'; std::cout.width(birth_wid); std::cout << (' ' + Birthdate) << '|'; std::cout.width(death_wid); std::cout << (' ' + DeathDate) << '|'; std::cout.width(lang_wid); std::cout << (' ' + LanguageCreated) << '|'; std::cout << '\n'; }; constexpr int total_wid = name_wid + birth_wid + death_wid + lang_wid + column_size; auto print_break = [] { std::cout.width(total_wid); std::cout.fill('-'); std::cout << '-' << std::endl; std::cout.fill(' '); }; std::cout.setf(std::ios::left, std::ios::adjustfield); print_break(); print_line(headers); print_break(); for (auto const &entry : data) print_line(entry); print_break(); }
输出:
---------------------------------------------------------------------------------------------------------------- | Name | Birthdate | Death date | Language Created | ---------------------------------------------------------------------------------------------------------------- | Dennis MacAlistair Ritchie | Tuesday, September 09, 1941 | Wednesday, October 12, 2011 | C | | Bjarne Stroustrup | Saturday, December 30, 1950 | | C++ | | Anders Hejlsberg | Friday, December 02, 1960 | | C# | | Guido van Rossum | Tuesday, January 31, 1956 | | Python | | Brendan Eich | Tuesday, July 04, 1961 | | Javascript | ----------------------------------------------------------------------------------------------------------------
参阅
管理浮点操作的精度 (公开成员函数) |