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

