Как должно выглядеть мое лямбда-выражение в этом случае? Я хочу добавлять векторы не с помощью std::plus<>, а с помощью лямбды.
MatVect add_vectors(const MatVect& v1, const MatVect& v2)
{
MatVect v(v1.size());
std::transform(v1.cbegin(), v1.cend(), v2.cbegin(), v.begin(), [](){ return });
return v;
}





Это должно понравиться:
std::transform(v1.cbegin(), v1.cend(), v2.cbegin(), v.begin(), [](const int& i, const int& j){ return i + j; });
Минимальный пример:
#include<iostream>
#include<vector>
using MatVect = std::vector<int>;
MatVect add_vectors(const MatVect& v1, const MatVect& v2)
{
MatVect v(v1.size());
std::transform(v1.cbegin(), v1.cend(), v2.cbegin(), v.begin(), [](const int& i, const int& j){ return i + j; });
return v;
}
int main()
{
MatVect mv1 = {1, 2, 3, 4, 5};
MatVect mv2 = {2, 4, 6, 8, 10};
MatVect mv3 = add_vectors(mv1, mv2);
for(auto const& i : mv3)
{
std::cout << i << " ";
}
return 0;
}
См. живую демонстрацию здесь.
Я выбрал int, потому что auto с типами, для которых не определено +, дало бы неверный результат. Пример вектора chars. В любом случае это минимальный пример. ОП может меняться в соответствии со своими потребностями.
Я бы попробовал что-то вроде следующего
MatVect add_vectors(MatVect const &v1, MatVect const &v2)
{
MatVect v(size(v1));
std::transform(std::cbegin(v1), std::cend(v1), std::cbegin(v2), std::begin(v),
[](auto const lhs, auto const rhs)
{
return lhs + rhs;
});
return v;
}
Остается вопрос, почему бы не использовать std::plus<>?
@Hiroki Хороший вопрос, должно быть, это была «опечатка».
Только небольшой комментарий, но ваша функция работает, только если MatVect содержит
int. Я бы заменилintнаauto