首页 > 解决方案 > 需要通过迭代器进行矩阵乘法的帮助

问题描述

所以我试图实现一个运算符重载,这将允许我将一个矩阵和一个向量相乘。矩阵本身就是向量的向量。我已经生成了通过使用 for 循环和简单的向量索引来实现这一点的代码,但是,我想尝试使用迭代器来实现它。

我的第一步是产生一个运算符重载,它允许我“乘”向量。从这个意义上说,乘法是逐行操作。所以对于两个向量 a = {a1,a2,a3} 和 b = {b1,b2,b3},a*b 的结果是 {a1b1, a2b2, a3b3}。这是按如下方式实施的:

template<typename T> 
vector<double> operator*(const vector<T> &v1, const vector<T> &v2) //vector * vector [broken down matrix] Not dot product
{
    vector<double> output(v2.size());
    int pos = 0;            

    for(auto &row : v1){
        for(auto &col : v2){
            output[pos] = col*row;  
        }
        pos++;
    }
    return output; 
}

我的想法是为矩阵 * 向量的乘法实现几乎以下代码:

template<typename T> 
vector<double> operator*(const vector<vector<T> > &v1, const vector<T> &v2) //matrix * vector 
{
    vector<double> output(v2.size()); 
    int pos = 0; 

    for(auto &row : v1){
            output[pos] = row*v2; 
        }
        pos++; 
    return output; 
}

我想我知道我的问题。row 不是向量,所以当我尝试做 row*v2 时,它没有意义,也没有使用向量 * 向量运算符重载。所以我的问题是,我怎样才能使迭代器对向量向量进行操作,从而允许所需的乘法属性。也许这种方法从根本上讲是有问题的,在这种情况下,我欢迎任何额外的帮助。谢谢

后续问题:如所见,这些是模板功能。有没有一种方法可以根据类型名 TIe 声明向量“输出”,以便当整数向量/矩阵传递到函数时,返回整数向量,而当双向量/矩阵传递到函数时,双向量被退回。

标签: c++matrixvectoroverloadingoperator-keyword

解决方案


推荐阅读