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