#ifndef MATRIX_H #define MATRIX_H #include #include class Matrix { private: unsigned int rows; unsigned int cols; double** data; //allocate memory and fill with a given value void allocateMemory(unsigned int r, unsigned int c, double fill); //deallocate memory void deallocateMemory(); public: ////Constructors Matrix(); Matrix(unsigned int r, unsigned int c, double fill); //copy constructor Matrix(const Matrix& other); ////Destructor ~Matrix(); ////Accessors Matrix& operator=(const Matrix& other); unsigned int num_rows() const; unsigned int num_cols() const; //deallocates memory and resets rows/cols to 0) void clear(); //if (row, col) is within bounds, stores the element in `value` and returns true; //otherwise, returns false bool get(unsigned int row, unsigned int col, double &value) const; ////Modifier //if (row, col) is within bounds, sets the element to `value` and returns true; //otherwise, returns false. bool set(unsigned int row, unsigned int col, double value); //multiplies every element in the matrix by the provided coefficient void multiply_by_coefficient(double coeff); //swaps two rows of the matrix. Returns true if both indices are valid, //false otherwise bool swap_row(unsigned int row1, unsigned int row2); //transposes the matrix in place (switches rows and columns). void transpose(); //adds another matrix to this one element-wise (if dimensions match) and returns true; //otherwise, returns false. bool add(const Matrix& other); //subtracts another matrix from this one element-wise (if dimensions match) //and returns true; otherwise, returns false. bool subtract(const Matrix& other); //returns a new dynamically allocated array (of size num_cols) //containing the elements in the specified row. double* get_row(unsigned int row) const; //returns a new dynamically allocated array (of size num_rows) //containing the elements in the specified column. double* get_col(unsigned int col) const; //divides the matrix into four quadrants and returns a pointer to an array of //4 Matrix objects: Upper Left, Upper Right, Lower Left, Lower Right. //each quadrant is of size ceil(rows/2) x ceil(cols/2) //and the quadrants overlap when the dimensions are odd. Matrix* quarter() const; ////Operators //equality operator: two matrices are equal if they have the same dimensions and //every corresponding element differs by no more than a small epsilon. bool operator==(const Matrix& other) const; //inequality operator bool operator!=(const Matrix& other) const; //overloaded output operator for printing the matrix friend std::ostream& operator<<(std::ostream& out, const Matrix& m); }; #endif