functional 库

声明方式:function<R(Args...)>f;

其中 R 为返回值,Args... 为形参,f 为名称。

一个 function 可以作为函数直接使用。

function<int(int,int)>f[4]={
  [](int x,int y){return x+y;},
  [](int x,int y){return x-y;},
  [](int x,int y){return x*y;},
  [](int x,int y){return x/y;}
};
//声明一个数组,每个元素都是一个 function<int(int,int)>

for(int i=0;i<4;++i)
    cout<<f[i](5,2)<<' ';
//output:7 3 10 2

常用来代替函数指针。

看着好高级

functional 库在 C++14 给大部分模板都加入了默认类型 void,如:greater<void>plus<void> 等。

这里的 void 可以省略,因此以后就可以不用写具体类型了:

vector<pair<int,int>>v;
//...
sort(begin(v),end(v),greater<pair<int,int>>());//C++11
sort(begin(v),end(v),greater<>());//C++14
  • 非常方便。
  • bit_not<>在 C++98 的 functional 库中有提到。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部