码迷,mamicode.com
首页 > 其他好文 > 详细

Sword STL仿函数示例

时间:2018-10-31 01:07:57      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:oid   操作   仿函数   编译器   def   typedef   for_each   char   names   

一元函数 unary_function
1.有返回值.
2.只有一个参数.
template <class Arg, class Result>
  struct unary_function {
    typedef Arg argument_type;
    typedef Result result_type;
  };
  
unary_function可以作为一个一元函数对象的基类,它只定义了参数和返回值的类型,本身并不重载()操作符,这个任务应该交由派生类去完成。

 
二元函数 binary_function
1.有返回值.
2.两个参数.

binary_function可以作为一个二元函数对象的基类,它只定义了参数和返回值的类型,本身并不重载()操作符,这个任务应该交由派生类去完成。

template <class Arg1, class Arg2, class Result>
  struct binary_function {
    typedef Arg1 first_argument_type;
    typedef Arg2 second_argument_type;
    typedef Result result_type;
};
/* 仿函数 */
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>  //std::sort
#include <functional> //binary_function类和unary_function类

using namespace std;

struct STComp:public binary_function<int,int,bool>
{
    inline bool operator()(int x, int y)
    {
        return x > y;
    }
};

struct STPrint :public unary_function<int, bool>
{
    inline void operator()(int x)
    {
        cout << x << endl;
    }
};

void test()
{
    vector<int> v1 = { 1,2,3,4,5,6,7,8 };
    //仿函数的应用
    sort(v1.begin(), v1.end(), STComp());
    for_each(v1.begin(), v1.end(), STPrint());
}

int main()
{
    test();
    getchar();
    return 0;
}
为什么函数对象的性能优于函数指针
在调用带有函数指针的函数时,编译器产生一个间接函数调用——通过指针调用。 大部分编译器不会试图去内联通过函数指针调用的函数
(甚至函数已经声明为inline而且这个优化看起来很直接)。但是函数对象的成员函数可以声明为内联方法

 

Sword STL仿函数示例

标签:oid   操作   仿函数   编译器   def   typedef   for_each   char   names   

原文地址:https://www.cnblogs.com/zhanggaofeng/p/9880443.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!