STL Function Objects and Using Lambdas

函数对象是定义了operator()函数的类,相比普通函数具有多实例,可定制,比函数指针更快的特点。

默认传递给stl算法的函数对象参数是值传递的,但可以自定义算法模板传递参数为引用类型,使得外部可以访问到函数对象的内部状态(或使用for_each的返回值)

函数对象一般用来提供全局的使用,lambda表达式用于局部的使用

预定义的函数对象

STL Function Objects and Using Lambdas_第1张图片

函数适配器

STL Function Objects and Using Lambdas_第2张图片

bind的特点

• Adapt and compose new function objects out of existing or predefined function objects

• Call global functions

• Call member functions for objects, pointers to objects, and smart pointers to objects

bind将参数绑定到可调用对象上,参数的占位符定义在std::placeholders上的_1,_2等;bind表达式可以直接调用,嵌套;bind内部的参数是值传递,可以使用ref或cref转换为引用

例如

auto plus10 = std::bind(std::plus(), std::placeholders::_1, 10);

plus10(7);//将7作为std::plus()第一个参数

也可以用bind绑定数据成员

int sum= accumulate (coll.begin(), coll.end(), 0, bind(

plus(),_1,bind(&map::value_type::second,_2)

));

mem_fn()绑定类的成员函数

例如

std::for_each (coll.begin(), coll.end(), std::mem_fn(&Person::print));

std::mem_fn(&Person::print)(n); // calls n.print()

std::mem_fn(&Person::print2)(n,"Person: "); // calls n.print2("Person: ")

你可能感兴趣的:(STL Function Objects and Using Lambdas)