Лямбда-выражение (сумма векторов) - PullRequest
2 голосов
/ 08 апреля 2019

Как должно выглядеть мое лямбда-выражение в этом случае? Я хочу добавить векторы не 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;
}

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Должно быть так:

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;
}

См. Демо здесь .

1 голос
/ 08 апреля 2019

Я бы попробовал что-то вроде следующего

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<>?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...