#pragma once #include #include #include #include class Matrix { private: std::size_t m_Raws; std::size_t m_Columns; std::vector m_Data; public: Matrix(const std::string& fileNameInput); 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 Insert(); void Print() const; void Save(const std::string& fileName); void Load(const std::string& filename); 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; long double& operator[](std::size_t index); long double& at(std::size_t raw, std::size_t column); long double at(std::size_t raw, std::size_t column) const; friend std::ostream& operator<<(std::ostream& stream, const Matrix& mat); friend std::istream& operator>>(std::istream& stream, Matrix& mat); }; template bool IsEqualZero(T var) { return std::abs(var) < std::pow(10, -5); }