for_each和transform

Mai*_*ein 2 c++ algorithm lambda c++11

for_each(ivec.begin(),ivec.end(),
        []( int& a)->void{ a = a < 0 ? -a : a; 
    });

transform(ivec.begin(),ivec.end(),ivec.begin(),
        [](int a){return a < 0 ? -a : a;
    });
Run Code Online (Sandbox Code Playgroud)

我目前正在学习lambdas,我很好奇我上面发布的两个实现有何不同?

K-b*_*llo 5

您显示的两个实现在逻辑上没有区别(假设您通过添加返回获得第一个版本).第一个元素修改元素,而最后一个元素用新值覆盖元素.

我看到的最大的区别是,transform你可以通过abs而不是重新实现它的lambda.