Пройтись по двум контейнерам с помощью 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);