我想做一个函数,给定2矩阵返回两者的总和。我认为问题在于如何初始化矩阵't'。
#include <iostream>
#include <vector>
using namespace std;
typedef vector< vector<int> > Matrix;
Matrix sum(const Matrix&a,const Matrix&b){
Matrix t;
for(int i=0;i<a.size();i++)
for(int j=0;j<a.size();j++)
t[i][j] = a[i][j] + b[i][j];
return t;
}
答案 0 :(得分:2)
您需要使用以下内容初始化t
的行和列:
Matrix t = vector< vector<int> >(row_count, vector<int>(col_count, 0));
这会使row_count
个col_count
矩阵填充零。
关于性能的旁注:与for循环中的.size()
进行比较意味着在每次迭代之前,必须再次计算.size()
。您可以通过预先计算来保存一些处理(这会增加大量数据集):
for (int row = 0, row_ct = mat.size(); row < row_ct; ++row)
答案 1 :(得分:0)
您通常没有矩形数据集:每个a[i]
是一个可能不同长度的向量。假设你确实注意要有一个矩形网格,你的for循环仍然关闭;它应该是这样的:
for (int i = 0; i < a.size(); i++)
{
assert(a.size() <= b.size() && a.size() <= t.size());
for (int j = 0; j < a[i].size(); j++) // !!
{
assert(a[i].size() <= b[i].size() && a[i].size() <= t[i].size());
t[i][j] = a[i][j] + b[i][j];
}
}
我添加了一些断言来表明你必须满足哪些先决条件。
要初始化矩形数组,您可以执行以下操作:
std::vector<std::vector<int>> v(n_rows, std::vector<int>(n_cols, 0));