需求
- 二維數組存儲矩陣
- 輸入/輸出矩陣
- 加減乘除(維度檢查)
- 轉置
核心代碼
#include <iostream>
#include <vector>
using namespace std;
using Matrix = vector<vector<double>>;
Matrix readMatrix(int r, int c) {
Matrix m(r, vector<double>(c));
for (int i = 0; i < r; ++i)
for (int j = 0; j < c; ++j)
cin >> m[i][j];
return m;
}
void printMatrix(const Matrix& m) {
for (auto& row : m) {
for (auto v : row) cout << v << '\t';
cout << '\n';
}
}
Matrix add(const Matrix& a, const Matrix& b) {
int r = a.size(), c = a[0].size();
Matrix res(r, vector<double>(c));
for (int i = 0; i < r; ++i)
for (int j = 0; j < c; ++j)
res[i][j] = a[i][j] + b[i][j];
return res;
}
Matrix mul(const Matrix& a, const Matrix& b) {
int r = a.size(), c = b[0].size(), k = a[0].size();
Matrix res(r, vector<double>(c, 0));
for (int i = 0; i < r; ++i)
for (int j = 0; j < c; ++j)
for (int p = 0; p < k; ++p)
res[i][j] += a[i][p] * b[p][j];
return res;
}
Matrix transpose(const Matrix& a) {
int r = a.size(), c = a[0].size();
Matrix res(c, vector<double>(r));
for (int i = 0; i < r; ++i)
for (int j = 0; j < c; ++j)
res[j][i] = a[i][j];
return res;
}
主程序邏輯
int main() {
int r1, c1, r2, c2;
cout << "Matrix A rows cols: "; cin >> r1 >> c1;
auto A = readMatrix(r1, c1);
cout << "Matrix B rows cols: "; cin >> r2 >> c2;
auto B = readMatrix(r2, c2);
if (r1 == r2 && c1 == c2) {
cout << "A+B:\n"; printMatrix(add(A,B));
cout << "A-B:\n"; printMatrix(sub(A,B)); // 類似 add
}
if (c1 == r2) {
cout << "A*B:\n"; printMatrix(mul(A,B));
}
cout << "A^T:\n"; printMatrix(transpose(A));
cout << "B^T:\n"; printMatrix(transpose(B));
return 0;
}
進階:運算符重載
struct Mat {
vector<vector<double>> d;
Mat(int r, int c) : d(r, vector<double>(c)) {}
Mat operator+(const Mat& o) const { return add(d, o.d); }
Mat operator*(const Mat& o) const { return mul(d, o.d); }
Mat T() const { return transpose(d); }
};