#include "../vectors/vector.hpp" #include #include #include using namespace std; class matrix { private: long long num_rows; long long num_cols; vector *rows; public: matrix(const long long num_rows, const long long num_cols) { this->num_rows = num_rows; this->num_cols = num_cols; this->rows = (vector *)calloc(sizeof(vector), num_rows); for (long long i = 0; i < num_rows; i++) { this->rows[i] = vector(num_cols); } } ~matrix() { this->num_rows = 0; this->num_cols = 0; free(this->rows); this->rows = NULL; } friend ostream &operator<<(ostream &os, const matrix &m) { char last = '\0'; for (long long i = 0; i < m.num_rows; i++) { for (long long j = 0; j < m.num_cols; j++) { string symbols[3]; symbols[0] = "|"; ostringstream oss; oss << " " << m.rows[i][j] << " "; symbols[1] = oss.str(); symbols[2] = "|"; for (int i = 0; i < 3; i++) { int len = symbols[i].length() - 1; char cur = symbols[i][0]; if (cur != last) { os << symbols[i]; } last = symbols[i][len]; } } if (i != m.num_rows - 1) os << endl << "|"; } return os; } const vector operator[](const long long index) const { return this->rows[index]; } // FIXME: Figure out how to make sure you do not try to access something // outside of the index vector &operator[](const long long index) { return this->rows[index]; } };