C++矩阵类的实现
环境:Win10、VS2017
最近老师布置一个简单的C++作业——实现一个矩阵类,并且实现矩阵运算。
主要实现运算为矩阵的加、减、乘、除以及求行列式,伴随矩阵,代数余子式和逆矩阵等。在参考网上的一些前辈的代码后,写出了这些运算的简单实现。
因为矩阵的加、减、乘、除(完成求逆矩阵后)、转置等运算比较简单,所以此处主要讲上述其余运算的实现。
话不多说,开始:
首先定义一个矩阵类,需要实现功能略多,还有各运算函数的声明,大概如下:
class Matrix
{
public:
Matrix(): DataArray(0) {
}
Matrix(int rows, int cols) :DataArray(rows)
{
for (int i = 0; i < rows; i++)
DataArray[i].resize(cols);
}
Matrix(const Matrix &m) {
(*this) = m; }
friend istream&operator>>(istream &is, Matrix &A); //重载运算符>>用于输入矩阵
friend ostream&operator<<(ostream &os, const Matrix &A); //重载运算符<<用于输出矩阵
//加、减、乘
const Matrix& operator+=(const Matrix &A);
.........
//需要用到一些的函数
void resize(int, int); //改变矩阵大小
bool push_back(const vector<T>& v) {
DataArray.push_back(v); } //添加一行
void swap_row(int ,int ); //交换矩阵的两行
int rows() const {
return DataArray.size(); }
int cols() const {
return rows() ? (DataArray[0].size()) : 0; }
bool empty() const {
return rows() == 0; }
bool square() const {
return !(empty()) && rows() == cols(); } //判断矩阵是否为方阵
const vector<double> operator[](int row) const {
return DataArray[row]; } //这两行用于取矩阵元素
vector<double>& operator[](int row) {
return DataArray[row]; }
protected:
vector<vector<double>>DataArray;
};
const double det(const Matrix &A); //求行列式
const double alge_cofactor(const Matri