如何深入理解并高效运用C++中的仿函数与函数适配器技术?
- 内容介绍
- 相关推荐
本文共计3004个文字,预计阅读时间需要13分钟。
所谓的仿函数(functor),是通过重载()运算符模拟函数形式的类。因此,这里需要明确两点:
1. 仿函数不是函数,而是一个类;
2.仿函数重载了()运算符,使其可以像函数一样使用,进行子对象调用。
所谓的仿函数(functor),是通过重载()运算符模拟函数形为的类。
因此,这里需要明确两点:
1 仿函数不是函数,它是个类;
2 仿函数重载了()运算符,使得它的对你可以像函数那样子调用(代码的形式好像是在调用函数)。
for_each
这里的for循环语句有点冗余,想到了std::for_each ,为了使用for_each,我们需要定义一个函数,如下:
void print( State* pstate ) { pstate->print(); }
于是就可以简化为下面代码:
std::for_each( vect.begin(), vect.end(), &print );
STL大致分为六大模块:容器(container),算法(algorithm),迭代器(iterator),仿函数(functor),配接器(adapter),配置器(allocator)。其中仿函数是体积最小,观念最简单,但是在stl算法的搭配中起到了非常重要的作用,这是与简单的lambda或者指针函数所不同的。
本文共计3004个文字,预计阅读时间需要13分钟。
所谓的仿函数(functor),是通过重载()运算符模拟函数形式的类。因此,这里需要明确两点:
1. 仿函数不是函数,而是一个类;
2.仿函数重载了()运算符,使其可以像函数一样使用,进行子对象调用。
所谓的仿函数(functor),是通过重载()运算符模拟函数形为的类。
因此,这里需要明确两点:
1 仿函数不是函数,它是个类;
2 仿函数重载了()运算符,使得它的对你可以像函数那样子调用(代码的形式好像是在调用函数)。
for_each
这里的for循环语句有点冗余,想到了std::for_each ,为了使用for_each,我们需要定义一个函数,如下:
void print( State* pstate ) { pstate->print(); }
于是就可以简化为下面代码:
std::for_each( vect.begin(), vect.end(), &print );
STL大致分为六大模块:容器(container),算法(algorithm),迭代器(iterator),仿函数(functor),配接器(adapter),配置器(allocator)。其中仿函数是体积最小,观念最简单,但是在stl算法的搭配中起到了非常重要的作用,这是与简单的lambda或者指针函数所不同的。

