#C++矩阵类的实现

C++矩阵类的实现

环境:Win10、VS2017

最近老师布置一个简单的C++作业——实现一个矩阵类,并且实现矩阵运算。
主要实现运算为矩阵的加、减、乘、除以及求行列式,伴随矩阵,代数余子式和逆矩阵等。在参考网上的一些前辈的代码后,写出了这些运算的简单实现。
因为矩阵的加、减、乘、除(完成求逆矩阵后)、转置等运算比较简单,所以此处主要讲上述其余运算的实现。

话不多说,开始:
首先定义一个矩阵类,需要实现功能略多,还有各运算函数的声明,大概如下:

class Matrix 
{
   
publicMatrix(): 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
  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 C++ 矩阵实现矩阵相乘的示例代码: ```c++ #include <iostream> #include <vector> using namespace std; class Matrix { private: vector<vector<int>> data; // 存储矩阵的二维向量 int m, n; // 矩阵的行数和列数 public: // 构造函数 Matrix(int rows, int cols) { m = rows; n = cols; data.resize(m, vector<int>(n, 0)); // 初始化矩阵为全零矩阵 } // 矩阵相乘运算符重载 Matrix operator*(const Matrix& other) { if (n != other.m) { cout << "矩阵维度不匹配,无法相乘" << endl; return Matrix(0, 0); } Matrix result(m, other.n); for (int i = 0; i < m; i++) { for (int j = 0; j < other.n; j++) { int temp = 0; for (int k = 0; k < n; k++) { temp += data[i][k] * other.data[k][j]; } result.data[i][j] = temp; } } return result; } // 矩阵赋值运算符重载 Matrix& operator=(const Matrix& other) { if (this == &other) { return *this; } m = other.m; n = other.n; data = other.data; return *this; } // 打印矩阵 void print() { for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cout << data[i][j] << " "; } cout << endl; } } }; int main() { Matrix A(2, 3); Matrix B(3, 2); A.print(); B.print(); A = {{1, 2, 3}, {4, 5, 6}}; B = {{7, 8}, {9, 10}, {11, 12}}; A.print(); B.print(); Matrix C = A * B; C.print(); return 0; } ``` 这个示例代码中,我们定义了一个 `Matrix` 来表示矩阵,并实现矩阵相乘的运算符重载。在 `main()` 函数中,我们创建了两个矩阵 `A` 和 `B`,并将它们赋值为我们需要相乘的矩阵。然后,我们通过 `A * B` 的方式来计算它们的乘积,并将结果存储在 `C` 中。最后,我们打印了 `C` 的值,即矩阵相乘的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值