C++11通过Lambda表达式操作向量元素

C++11提供了Lambda表达式,可以方便地操作向量元素。虽然C++11的Lambda表达式是未命名函数,但是可以像变量一样命名一个Lambda表达式并且调用方式跟常规函数没有什么区别。例如:

auto op_square = [](int i){return i * i};
std::function<int(int)> op_times_two = [](int i){return i * 2};

定义一个名称为op_square的Lambda表达式,其调用如下:

int result{op_square(10)};
int result2{op_times_two(10)};

下面通过Lambda表达式实现对向量的元素操作

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

using namespace std;

int main(int argc, char** argv)
{
    // 初始化向量
    vector<int> data{};
    int value{4};

    cout << "input data:\n";
    // 输入数据
    copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(data));

    // 输出
    cout << "before transform:\n";
    copy(data.begin(),data.end(),ostream_iterator<int>(cout,","));
    cout << endl;

    // 定义一个Lambda表达式
    auto op = [value](int i){return i * value;};
    // 将每个元素乘以4
    transform(data.begin(),data.end(),data.begin(),op);

    //输出
    cout << "after transform:\n";
    copy(data.begin(),data.end(),ostream_iterator<int>(cout,","));
    cout << endl;

    return 0;
}

猜你喜欢

转载自blog.csdn.net/wujuxKkoolerter/article/details/114101068