You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中基于Vector的3×3二维矩阵自乘法实现问题咨询

3×3矩阵向量乘法的正确实现与错误修正

原代码中的核心错误

  • 循环条件错误:所有外层for循环的条件写成了vec.size(),这是一个非零常量,会导致循环无限执行,正确条件应为i < vec.size()
  • 循环结构与变量错误:matMultiply中j循环的花括号位置错误,导致vec[i][j] = 0仅执行一次,后续k循环的j已越界;同时k循环的增量写成i++,完全破坏循环逻辑
  • 矩阵乘法逻辑错误:
    1. 不能直接修改原矩阵,计算过程中原元素会被覆盖,导致后续计算使用错误值,必须创建新的结果矩阵存储运算结果
    2. 矩阵乘法的核心是累加而非直接相乘,公式应为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:03:34