seekerhit 2019-11-30
##定义
##应用STL的算法通常定义两个版本:一种实现常用的功能,采用默认的处理方法。另一种提供泛化能力,允许用户指定算法的比较准则,或者指定算法对容器中元素施加的“操作“等。这里的比较准则是算法中的一个模板参数。如STL中的search算法提供的两个版本:默认版本:
template <class _ForwardIter1, class _ForwardIter2> _ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1, _ForwardIter2 __first2, _ForwardIter2 __last2)
指定比较方法的版本:
template <class _ForwardIter1, class _ForwardIter2, class _BinaryPred> _ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1, _ForwardIter2 __first2, _ForwardIter2 __last2, _BinaryPred __predicate)
可以看到,指定比较方法版本的模板参数中多了一个谓词模板_BinaryPred,用于指定元素比较的准则。而默认版本采用=操作符判断是否相等。
指定操作有多种方法:
#include<iostream> #include<functional> using namespace std; int main(){ greater<int> ig; cout<<boolalpha<<ig(3,5)<<endl; //a cout<<boolalpha<<greater<int>()(5,3)<<endl; //b return 0; }
a行是通过Functor对象后加()与参数,调用Functor中重载的operator()函数中定义的功能。b行通过在Functor类后接(),调用Functor类的构造函数,生成一个临时的function object,并对这个临时对象调用operator().
编译运行程序,得到的结果是:
false true
STL内键的仿函数定义于functional头文件中,主要分为以下几类: