#pragma once #include #include #include #include class Matrix { public: typedef long double Element; private: std::size_t m_Raws; std::size_t m_Columns; std::vector m_Data; public: Matrix() : m_Raws(0), m_Columns(0) {} Matrix(std::size_t raws, std::size_t columns); Matrix(std::size_t raws, std::size_t columns, std::initializer_list&& initList); ~Matrix(); std::size_t GetRawCount() const; std::size_t GetColumnCount() const; void Transpose(); static Matrix Identity(std::size_t size); void Augment(const Matrix& right); Matrix SubMatrix(std::size_t raw_origin, std::size_t column_origin, std::size_t raw, std::size_t column) const; bool operator==(const Matrix& other) const; Matrix operator*(const Matrix& other) const; Element& operator[](std::size_t index); Element& at(std::size_t raw, std::size_t column); Element at(std::size_t raw, std::size_t column) const; }; template bool IsEqualZero(T var) { return std::abs(var) < std::pow(10, -5); }