平方和矩阵

时间:2012-02-08 19:43:55

标签: c++

我想做一个函数,给定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;
    }

2 个答案:

答案 0 :(得分:2)

您需要使用以下内容初始化t的行和列:

Matrix t = vector< vector<int> >(row_count, vector<int>(col_count, 0));

这会使row_countcol_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));
相关问题