实现了矩阵的生成、乘法运算。
1.完整代码如下:#include2.后期的扩展方向:#include #include #include using namespace std; struct Matrix { vector > M; size_t Rows; size_t Columns; Matrix(size_t r = 0,size_t c=0,int rv = 1) { Rows = r; Columns = c; for (size_t i = 0; i < r; i++) { vector t; for (size_t j = 0; j < c; j++) { if (rv > 1) { t.push_back(rand() % rv); } t.push_back(rv); } M.push_back(t); } } bool isNull() { return Rows == 0 || Columns == 0; } void printMatrix(const char* msg = "") { if (strlen(msg)>0) { printf("%sn", msg); } for (size_t i = 0; i < Rows; i++) { for (size_t j = 0; j < Columns; j++) printf("%d,",M[i][j]); printf("n"); } } }; // A*B Matrix mulMatrix(Matrix a, Matrix b) { if (a.isNull() || b.isNull()) { printf("空矩阵n"); // 此处直接返回一个空的Matrix,也就是0行0列的矩阵 return Matrix(); } if (a.Columns != b.Rows) { printf("不符合乘法要求的矩阵"); // 此处直接返回一个空的Matrix,也就是0行0列的矩阵 return Matrix(); } //如果符合要求,构建一个结果矩阵 Matrix c(a.Rows, b.Columns); for (size_t i = 0; i < a.Rows; i++) { for (size_t j = 0; j < b.Columns; j++) { //在进行默认构建时,所有矩阵中的数据全为1,所以此处需要进行置0 c.M[i][j] = 0; for (size_t k = 0; k < a.Columns; k++) { c.M[i][j] += a.M[i][k] * b.M[k][j]; } } } return c; } int main(int argc, char **argv) { std::cout << "开始执行矩阵运算:(输入0退出程序)" << endl; while (true) { std::cout << "请输入矩阵的阶数:" << endl; int len = 0; cin >> len; cout << "您输入的矩阵阶数为:" << len << endl; if (len < 1) { cout << "无效的阶数:" << len << endl; return 0; } Matrix Ma(len, len, 10); //Ma.printMatrix("随机生成的方阵Ma如下:"); Matrix Mb(len, 1, 10); //Mb.printMatrix("随机生成的列向量Mb如下:"); auto t1 = chrono::steady_clock::now(); Matrix Mc = mulMatrix(Ma, Mb); auto t2 = chrono::steady_clock::now(); double timeSpan = chrono::duration (t2 - t1).count(); printf("总用时为:%f ms", timeSpan); //Mc.printMatrix("----------Ma*Mb的结果如下:----------"); } return 0; }
- 将结构体封装为一个类,
- 编写其他的矩阵操作函数
- 运算符的重构



