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

C++矩阵两列值相加存入向量 类型不兼容错误求解

问题根因

  • 直接类型报错原因:二维数组a访问元素缺少行下标,a[j]是指向第j行数组的指针,无法直接和int类型值相加、赋值给int类型的b[c],所以触发类型不兼容报错。
  • 业务逻辑错误:遍历逻辑完全不符合「两列元素相加」的需求,两列相加的核心是固定两个列号,遍历所有行,将同一行的两列元素相加,原有代码的循环变量逻辑完全错位。
  • 边界错误:
    • read函数中循环条件写的是i < n、j < m,会导致最后一行、最后一列的元素没有被读取
    • 向量b赋值从下标1开始,输出时从下标0开始,会输出未初始化的垃圾值
    • 固定大小的b[10000]无法适配1000*1000矩阵的存储需求,容易出现数组溢出。

修复方案

以下为修正后的完整代码,默认计算第2列和第3列的逐行和,可按需修改vect函数的入参调整目标列:

#include <fstream>
#include <vector>
using namespace std;

ifstream fin("Matr.dat");
ofstream fout("out.dat");

int a[1000][1000];
int n, m;
void read()
{
    fin >> n >> m;
    // 修正边界,读取全部n行m列元素
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
            fin >> a[i][j];
    }
}
// col为需要相加的第一列的编号,自动和col+1列逐行相加
vector<int> vect(int col = 2)
{
    vector<int> b;
    b.reserve(n);
    // 遍历所有行,取同一行的两列元素相加
    for(int i = 1; i <= n; i++)
    {
        b.push_back(a[i][col] + a[i][col + 1]);
    }
    return b;
}

int main()
{
    read();
    vector<int> res = vect();
    for(int num : res)
        fout << num << ' ';
    return 0;
}

内容的提问来源于stack exchange,提问作者lombardini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:21:01