C++ STL函数对象 仿函数】的更多相关文章

简单地说,函数对象就是一个重载了()运算符的类实例,它可以像一个函数一样使用. #include <iostream> using namespace std; class Add { public: int operator ()(const int &a, const int &b) { return (a + b); } double operator ()(const double &a, const double &b) { return (a + b…
继承标准STL的函数对象 1: struct PopLess : public atd::binary_function<state,state,bool> 2: { 3: bool operator() { const State &a, const State &b } const 4: { 5: return popless(a,b); 6: } 7: } 作者的解释: 首先popless是一个函数对象,他重载了函数调用操作符,因此可以用普通函数的调用语法.当然也可以实例…
函数对象:重载函数调用操作符的类,其对象常称为函数对象. 函数对象属于类对象,能突破函数概念,保持类的状态 谓词: 一元函数对象:函数参数1个: 二元函数对象:函数参数2个: 一元谓词 函数参数1个,函数返回值是bool类型,可以作为一个判断式 谓词可以使一个仿函数,也可以是一个回调函数. 二元谓词 函数参数2个,函数返回值是bool类型 一元谓词函数举例如下 1,判断给出的string对象的长度是否小于6 bool GT6(const string &s) { return s.size()…
1. 定义 在STL中,可以把函数传递给算法,也可以把函数对象传递给算法. 那么,什么是函数对象呢? 我们来看下它的声明: class X { public: // define function call operator return-value operator() (arguments) const; ... } 你可以这样调用:X fo; ... fo(arg1, arg2); 我们来看个简单的打印的例子 PrintInt.h #ifndef Print_Int_H_ #define…
1. 预定义函数对象 C++标准库内含许多预定义的函数对象,也就是内置的函数对象. 你可以充分利用他们,不必自己费心去写一些自己的函数对象. 要使用他们,你只要包含如下头文件 #include <functional> eg: set<int, less<int>> coll;  // sort elements with < set<int, greater<int>> coll;  // sort elements with >…
我们再来看一个复杂的例子 需求: 我们需要对集合内每个元素加上一个特定的值 代码如下: AddInt.h class AddInt { private: int theValue; // the value to add public: // constructor initializes the value to add AddInt(int v) : theValue(v) { } // the "function call" for the element adds the va…
part 1. 仿函数在STL组件中的关系 如下图: # 仿函数配合算法完成不同的策略变化. # 适配器套接仿函数. part 2. 仿函数介绍 传递给算法的“函数型实参”不一定得是函数,可以是行为类似函数的对象.这种对象称为函数对象(function object),或称为仿函数(functor).——<STL标准库(第2版)> P233 1. 函数对象 = 仿函数.并且,function object = functor 2. 函数对象(仿函数)有四种实现方式:函数指针(fucntion…
谓词是指普通函数或重载的 operator()返回值是 bool 类型的函数对象(仿函数).如果operator 接受一个参数,那么叫做一元谓词,如果接受两个参数,那么叫做二元谓词,谓词可作为一个判断式.例如: struct myfuncobj01 { bool operator(int v){} // 接受一个参数,并且返回值为 Bool 即一元谓词 } bool compare01(int v); // 同样是叫做一元谓词 struct myfuncobj02 { bool operator…
重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象,也叫仿函数(functor),其实就是重载“()”操作符,使得类对象可以像函数那样调用.注意:1.函数对象(仿函数)是一个类,不是一个函数.2.函数对象(仿函数)重载了”() ”操作符使得它可以像函数一样调用.假定某个类有一个重载的 operator(),而且重载的 operator()要求获取一个参数,我们就将这个类称为“一元仿函数”(unary functor):相反,如果重载的 op…
一.仿函数(也叫函数对象)概观 仿函数的作用主要在哪里?从第6章可以看出,STL所提供的各种算法,往往有两个版本,其中一个版本表现出最常用(或最直观)的某种运算,第二个版本则表现出最泛化的演算流程,允许用户“以template参数来指定所要采行的策略”.以sort()为例,其第一版本是以operator<为排序时的元素位置调整依据,第二版本则允许用户指定任何“操作”,务求排序后的两两相邻元素都能令该操作结果为true. 要将某种“操作”当做算法的参数,唯一办法就是先将该“操作”(可能拥有数条以上…