transform算法的定义:

template< class InputIt, class OutputIt, class UnaryOperation >
OutputIt transform( InputIt first1, InputIt last1, OutputIt d_first,
UnaryOperation unary_op );

lambda的语法:

[ captures ] (optional)(c++20) ( params ) specifiers exception attr -> ret requires(optional)(c++20) { body }
[ captures ] ( params ) -> ret { body }
[ captures ] ( params ) { body }
[ captures ] { body }

例子:
处理序列中所有的奇数成0,将结果保存在另一个容器中。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    vector<int> values;
    vector<int> result;

    for( int i = 0; i < 10; ++i )
    {
        values.push_back( 1+i );
    }
    result.clear();
    result.reserve( values.size() );

    transform( values.begin(), values.end(), back_inserter( result ), 
        [](int a) -> int { if( a&1 ) return 0; return a; } );

    for( auto i: result )
    {
        cout << i << "\t";
    }
    cout << endl;
    return 0;
}

output:

0 2 0 4 0 6 0 8 0 10  

分类: C plus plus

发表评论

电子邮件地址不会被公开。 必填项已用*标注