Lambda表达式(向量之和)

时间:2019-04-08 06:52:00

标签: c++ lambda

在这种情况下,我的lambda表达式应该如何显示?我想不使用std::plus<>而是使用lambda添加向量。

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 个答案:

答案 0 :(得分:2)

它应该像这样:

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

请参见现场演示here

答案 1 :(得分:1)

我会尝试以下类似的方法

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