70 int n_printable_rows = 10,
int n_printable_cols = 10,
71 std::ostream &ostream = std::cout,
72 const char col_sep[] =
" ",
const char elide_sym[] =
" ... ",
74 assert(matrix.size() % n_cols == 0);
76 auto maxima = std::minmax_element(matrix.begin(), matrix.end());
77 T max_val = std::max(*maxima.first, std::abs(*maxima.second));
78 size_t n_digits = log10(max_val);
82 int n_rows = matrix.size() / n_cols;
84 n_printable_rows = std::min(n_rows, n_printable_rows);
85 n_printable_cols = std::min(n_cols, n_printable_cols);
87 const bool elide_rows = n_printable_rows < n_rows;
88 const bool elide_cols = n_printable_cols < n_cols;
90 if (elide_rows || elide_cols) {
91 w = std::max((
int)w, (
int)strlen(elide_sym));
95 ostream << std::fixed << std::setprecision(2);
97#define print_row(what) \
98 for (int col = 0; col < n_printable_cols / 2; col++) { \
99 ostream << std::right << std::setw(w) << (what); \
100 ostream << std::setw(0) << col_sep; \
103 ostream << std::setw(0) << elide_sym; \
105 for (int col = n_printable_cols / 2 + 1; col < n_printable_cols; col++) { \
106 ostream << std::right << std::setw(w) << (what); \
107 ostream << std::setw(0) << col_sep; \
110 for (
int row = 0; row < n_printable_rows / 2; row++) {
112 ostream << std::endl;
116 ostream << std::endl;
118 for (
int row = n_printable_rows / 2 + 1; row < n_printable_rows; row++) {
120 ostream << std::endl;