C++中基于Vector的3×3二维矩阵自乘法实现问题咨询
3×3矩阵向量乘法的正确实现与错误修正
原代码中的核心错误
- 循环条件错误:所有外层for循环的条件写成了
vec.size(),这是一个非零常量,会导致循环无限执行,正确条件应为i < vec.size() - 循环结构与变量错误:
matMultiply中j循环的花括号位置错误,导致vec[i][j] = 0仅执行一次,后续k循环的j已越界;同时k循环的增量写成i++,完全破坏循环逻辑 - 矩阵乘法逻辑错误:
- 不能直接修改原矩阵,计算过程中原元素会被覆盖,导致后续计算使用错误值,必须创建新的结果矩阵存储运算结果
- 矩阵乘法的核心是累加而非直接相乘,公式应为
result[i][j] += 原矩阵[i][k] * 原矩阵[k][j],而非vec[i][j] *= ...
- 提前返回:
matMultiply中第一次循环就执行return vec,导致函数仅处理第一行就结束,未完成整个矩阵运算
修正后的完整代码
#include <iostream> #include <vector> using namespace std; // 打印矩阵的函数 void display(const vector<vector<int>> &vec) { for (int i = 0; i < vec.size(); i++) { for (int j = 0; j < vec[i].size(); j++) { cout << vec[i][j] << " "; } cout << endl; } } // 矩阵乘法函数:返回新的结果矩阵,不修改原矩阵 vector<vector<int>> matMultiply(const vector<vector<int>> &vec) { int n = vec.size(); // 创建n×n的零矩阵作为结果容器 vector<vector<int>> result(n, vector<int>(n, 0)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { // 累加计算每个元素的值 for (int k = 0; k < n; k++) { result[i][j] += vec[i][k] * vec[k][j]; } } } return result; } int main() { vector<vector<int>> matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; cout << "原矩阵:" << endl; display(matrix); vector<vector<int>> multiplied = matMultiply(matrix); cout << "\n自身相乘后的矩阵:" << endl; display(multiplied); return 0; }
关键实现要点
- 使用const引用传递原矩阵,避免不必要的拷贝,同时保证原矩阵不被修改
- 预先创建结果矩阵并初始化为全0,再通过三层循环累加计算每个位置的元素
- 严格遵循矩阵乘法的数学规则:结果矩阵第i行第j列元素,是原矩阵第i行与第j列对应元素乘积的和
- 打印函数中使用
vec[i].size()而非vec.size(),让代码对非方阵也能正确打印(兼容更通用的矩阵场景)
内容的提问来源于stack exchange,提问作者John Mike
相关产品推荐
相关产品推荐

