Пройтись по двум контейнерам с помощью STL - алгоритма

Есть задача: сложить произведение элементов двух контейнеров.

//объявление v1, v2, res, проверка на равенство размеров...
for(int i = 0; i < v1.size(); ++i)
    res += v1[i] * v2[i];

Вроде норм, но захотелось здесь использовать stl-алгоритм, чтобы перемещаться с помощью итераторов (лучше если используем std::list). Не нашел ничего адекватного. Может кто знает, как решить задачу с помощью stl?

Пока формулировал - пришла идея сделать вот так:

std::vector<int> temp(v1);
std::transform(temp.begin(), temp.end(), v2.begin(), temp.begin(), [](int l, int r)
{
    return l * r;
});

auto res = std::accumulate(temp.begin(), temp.end(), 0);

Тоже выглядит не очень - появляется переменная temp, которую нужно проинициализировать + два раза обойти. Хочется уметь просто способ для действий над элементами контейнеров.


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

Автор решения: Harry

Воспользуйтесь алгоритмом inner_product.

//объявление v1, v2, res, проверка на равенство размеров...
auto res = std::inner_product(v1.begin(), v1.end(), v2.begin(), 0);
→ Ссылка