Как реализовать операции одномерного и двумерного массива?

Есть некая функция, которая должна реализовать следующую формулу: есть двумерный вектор: [1 2][3 4][5 6] и одномерный вектор равный количеству строк (3) и 2 коэффициента (7 и 8). Каждую строчку двумерного массива нужно умножить на определенные коэффициенты и сложить числа строки Например, первый элемент одномерного нужно найти следующим образом: S[1]=1x7+2x8 S[2]=3x7+4x8 и тд Как это реализовать? Мой способ не работает

std::vector<double> Sums(std::vector<std::vector<double>> pattern, int m, double a1, double a2) {
    std::vector<double> S;
    for (int i = 0; i < m; i++) {
        S[i] = a1 * pattern[i][0] + a2 * pattern[i][1];
    }
    return S;
}

Ответы (1 шт):

Автор решения: Павел Ериков

Строчкой:

std::vector<double> S;

Вы не выделяете память под элементы, но пытаетесь присвоить i-му элементу значение.

S[i] = a1 * pattern[i][0] + a2 * pattern[i][1];

Вам нужно или изначально выделить память под m элементов.

Например вот так:

std::vector<double> S(m);

Или не изменять значения i-го элемента, а добавлять в вектор элемент.

Например вот так:

S.push_back(a1 * pattern[i][0] + a2 * pattern[i][1]);
→ Ссылка