72 int n_printable_rows = 10,
int n_printable_cols = 10,
73 std::ostream &ostream = std::cout,
74 const char col_sep[] =
" ",
const char elide_sym[] =
" ... ",
76 assert(matrix.size() % n_cols == 0);
78 auto maxima = std::minmax_element(matrix.begin(), matrix.end());
79 T max_val = std::max(*maxima.first, std::abs(*maxima.second));
80 size_t n_digits = log10(max_val);
84 int n_rows = matrix.size() / n_cols;
86 n_printable_rows = std::min(n_rows, n_printable_rows);
87 n_printable_cols = std::min(n_cols, n_printable_cols);
89 const bool elide_rows = n_printable_rows < n_rows;
90 const bool elide_cols = n_printable_cols < n_cols;
92 if (elide_rows || elide_cols) {
93 w = std::max((
int)w, (
int)strlen(elide_sym));
97 ostream << std::fixed << std::setprecision(2);
99#define print_row(what) \
100 for (int col = 0; col < n_printable_cols / 2; col++) { \
101 ostream << std::right << std::setw(w) << (what); \
102 ostream << std::setw(0) << col_sep; \
105 ostream << std::setw(0) << elide_sym; \
107 for (int col = n_printable_cols / 2 + 1; col < n_printable_cols; col++) { \
108 ostream << std::right << std::setw(w) << (what); \
109 ostream << std::setw(0) << col_sep; \
112 for (
int row = 0; row < n_printable_rows / 2; row++) {
114 ostream << std::endl;
118 ostream << std::endl;
120 for (
int row = n_printable_rows / 2 + 1; row < n_printable_rows; row++) {
122 ostream << std::endl;