Умножение матриц через итераторы требуется помощь - PullRequest
1 голос
/ 20 февраля 2020

Так что я пытаюсь реализовать перегрузку оператора, которая позволит мне умножить матрицу и вектор. Матрица сама является вектором векторов. Я создал код, который достигает этого за счет использования циклов 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, это не имеет смысла, и при этом он не использует перегрузку оператора vector * vector. Поэтому мой вопрос заключается в том, как я могу сделать так, чтобы итератор работал с вектором векторов, обеспечивая желаемые свойства умножения. Возможно, этот подход в корне неудачен, и в этом случае я приветствую любую дополнительную помощь. Спасибо

за следующий вопрос: Как видно, это функции шаблонов. Есть ли способ, которым я могу объявить вектор 'output' в терминах typename TIe, чтобы при передаче целочисленных векторов / матриц в функцию возвращались целочисленные векторы, а когда в функцию передаются двойные векторы / матрицы, двойные векторы возвращаются.

...