在科学计算、图形处理、机器学习等领域,C++矩阵运算是不可或缺的基础技能。本教程将手把手教你如何用C++实现一个简单的矩阵类,支持创建、显示和乘法操作。即使你是编程小白,也能轻松理解!
矩阵是线性代数的核心工具。在物理模拟、图像变换、神经网络等场景中,我们经常需要对大量数据进行批量计算,而矩阵正是高效组织和处理这些数据的理想结构。掌握C++线性代数的基本实现,能让你更深入理解底层算法。
我们将创建一个名为 Matrix 的类,包含行数、列数和数据存储。使用二维 vector 来保存元素,这样既安全又灵活。
#include <iostream>#include <vector>using namespace std;class Matrix {private: int rows, cols; vector<vector<double>> data;public: // 构造函数:初始化矩阵大小 Matrix(int r, int c) : rows(r), cols(c) { data.resize(rows, vector<double>(cols, 0.0)); } // 获取行数和列数 int getRows() const { return rows; } int getCols() const { return cols; } // 重载()操作符,方便访问元素 double& operator()(int i, int j) { return data[i][j]; } const double& operator()(int i, int j) const { return data[i][j]; } // 打印矩阵 void print() const { for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { cout << data[i][j] << "\t"; } cout << endl; } }}; 矩阵乘法是矩阵乘法C++中最核心的操作。规则是:第一个矩阵的列数必须等于第二个矩阵的行数。结果矩阵的大小为(第一个矩阵的行数 × 第二个矩阵的列数)。
我们在 Matrix 类中添加一个友元函数来实现乘法:
// 矩阵乘法:A * BMatrix operator*(const Matrix& A, const Matrix& B) { if (A.getCols() != B.getRows()) { throw invalid_argument("矩阵维度不匹配,无法相乘!"); } int rows = A.getRows(); int cols = B.getCols(); int common = A.getCols(); Matrix result(rows, cols); for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { double sum = 0.0; for (int k = 0; k < common; ++k) { sum += A(i, k) * B(k, j); } result(i, j) = sum; } } return result;} 现在,让我们把所有代码整合起来,并测试一下矩阵乘法是否正确。
int main() { // 创建两个矩阵 Matrix A(2, 3); Matrix B(3, 2); // 初始化矩阵A A(0, 0) = 1; A(0, 1) = 2; A(0, 2) = 3; A(1, 0) = 4; A(1, 1) = 5; A(1, 2) = 6; // 初始化矩阵B B(0, 0) = 7; B(0, 1) = 8; B(1, 0) = 9; B(1, 1) = 10; B(2, 0) = 11; B(2, 1) = 12; cout << "矩阵 A:" << endl; A.print(); cout << "\n矩阵 B:" << endl; B.print(); // 计算 C = A * B Matrix C = A * B; cout << "\n矩阵 C = A * B:" << endl; C.print(); return 0;} 运行结果应为:
58 64139 154
这个基础版本已经能完成基本的矩阵类C++操作。你可以进一步扩展功能,例如:
通过本教程,你已经学会了如何用C++从零实现一个支持乘法的矩阵类。这不仅帮助你理解C++矩阵运算的底层机制,也为后续学习高性能数值计算库(如Eigen、OpenCV)打下坚实基础。动手试试吧,编程的乐趣在于实践!
本文由主机测评网于2025-12-09发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125258.html