先预习下"函数符"概念:
class f_mode {
pritvate:
int dv;
public:
bool operator() (int x) {return x % dv == 0;}
};
cout_if(numbers.begin(), numbers.end(), f_mod(3));
cout_if(numbers.begin(), numbers.end(), f_mod(13));
函数符是一个类对象;
相比于函数指针,可使用同一函数符来完成这两项计数任务;
好处一:距离
定义离使用的地方更近;
好处二:简洁
给lambda取一个名字
auto mod3 = [](int x) { return x % 3 == 0;}
好处三:效率
函数指针方法阻止内联,而函数符和lambda不会
好处四:功能
lambda可以访问作用域内的任何动态变量:要捕获要使用的变量,可将名称放在中括号内。