`
fuerbosi
  • 浏览: 466294 次
文章分类
社区版块
存档分类
最新评论

暑假C++复习15之函数对象

 
阅读更多

标准库定义的函数对象

标准库定义了一组算术,关系与逻辑函数对象类,标准库还定义了一组函数适配器,使我们能够特化或者扩展标准库所定义的以及自定义的函数对象类,这些标准库函数对象类型是在functional头文件中定义的。

算术函数对象类型:

Plus<Type> +

Minus<Type> -

Multiplies<Type> *

Divides<Type> /

Modulus<Type> %

Negate<Type> -//负号

关系函数对象类型:

Equal_to<Type> ==

Not_equal_to<Type> !=

Greater<Type> >

Greater_equal >=

Less<Type> <

Less_equal <=

逻辑函数对象类型:

Logical_add<Type> &&

Logical_or<Type> |

Logical_not<Type> !

每个函数对象类都是一个模板,我们需要为该模板提供一种类型,例如:

Plus<string>是将string加法操作符应用于string对象。而plus<int>是将int操作符应用到int对象。

Plus<int> intAdd;

Negate<int>intNegate;

Int sum=intAdd(10,20);//sum=30

Sum=intAdd(10,intNegate(10));//sum=0;

在算法中使用标准库函数对象:

Sort(svec.begin().svec.end(),greater<string>());

将按降序对vecrtor进行排序。

函数对象的函数适配器

(1)绑定器(binder),是一种函数适配器,它将通过一个操作数绑定到给定值而将二元函数对象转换为一元函数对象。

(2)求反器(negator),是一种适配器。他将谓词函数对象的真值求反。

标准库定义了两个绑定器适配器:bind1st,bind2lnd,每个绑定器接受一个函数对象和一个值,正如你可能想到的,bind1st将给定的值绑定到二元函数对象的第一个实参,bind2nd将给定值绑定到二院函数对象的第二个实参。例如:

Count_if( vec.begin(), vec.end(), bind2nd( less_equal<int>(),10 ) );//小于等于10

传给count_if的第三个实参使用bind2nd函数适配器,该适配器返回一个函数对象,该对象用10作右操作数应用<=操作符。这个调用计算输入范围中小于或等于10的元素的个数。

标准库还定义了两个求反器:not1和not2你可能已经想到了,not1将一元函数对形象的真值求反,not2将二元函数队形的真值求反。

Count_if( vec.begin(), vec.end(), not2(bind2nd(less_equal<int>(), 10 )) );//结果不小于等于10

分享到:
评论

相关推荐

    C++中如何定义函数对象?

    C++中如何定义函数对象?尽管函数指针被广泛用于实现函数回调,但C++还提供了一个重要的实现回调函数的方法,那就是函数对象。今天达内C++培训的老师同大家分享C++中如何定义函数对象?

    C++函数对象的定义及使用

    C++函数对象的定义及使用。包含了函数对象类的定义,函数对象的定义,其中重载的函数调用运算符的重载的使用。

    C++中回调函数(CallBack)的用法分析

    本文实例分析了C++中回调函数(CallBack)的用法。分享给大家供大家参考。具体分析如下: 如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。 其错误是普通的C++成员函数都隐含了一个传递...

    C++函数C++函数C++函数

    C++函数C++函数C++函数C++函数C++函数C++函数C++函数C++函数C++函数C++函数C++函数C++函数C++函数C++函数

    C++实现K均值函数

    C++实现K均值函数

    C++ 导出dll接口函数 C++ 导出dll接口函数 C++ 导出dll接口函数

    C++ 导出dll接口函数 C++ 导出dll接口函数 C++ 导出dll接口函数

    C++中的构造函数、析构函数剖析

    C++中的构造函数、析构函数剖析 在C+ + 中, 构造函数是一个在构件对象的时 候调用的特殊的函数, 其目的是对对象进行初始 化工作, 从而使对象被使用之前可以处于一种合 理的状态。析构函数是在撤消对象时, 收回对象 ...

    C++类对象的拷贝构造函数

    C++类对象的拷贝构造函数 C++类对象的拷贝构造函数 C++类对象的拷贝构造函数 C++类对象的拷贝构造函数 C++类对象的拷贝构造函数 C++类对象的拷贝构造函数

    C++面向对象复习资料

    对C++面向对象过程设计的资料汇总,分别对多态 继承 类 对象 模板 析构函数和构造函数做了全面的概括和复习。

    C++规定与类同名的函数就是拷贝构造函数

    C++规定与类同名的函数就是拷贝构造函数 默认拷贝构造函数 在类定义中如果没有提供自己的拷贝构造函数,则C++提供一个默认的构造函数,其拷贝策略是逐个成员依次拷贝。 深拷贝和浅拷贝 默认拷贝构造函数均是浅拷贝 ...

    c++之第五函数重载与缺省参数

    c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数

    纯C++ 字符串处理函数大全源码

    自己封装的纯C++的字符串处理函数大全,像特别好用的 字符串切分 Split函数代码均已经过测试,并有接口说明,可方便调用。

    C/C++/Linux函数函数插桩(打桩)指南

    在具有一定规模的代码中(C 语言),调用第三方动态库中的函数来完成一些功能,是很常见的工作场景。 假设现在有一项任务:需要在调用某个动态库中的某个函数的之前和之后,做一些额外的处理工作。 这样的需求一般称作...

    c++虚函数使用

    c++虚函数.C++中的虚函数的作用主要是实现了多态的机制。

    C-C++中的System函数

    全面介绍C-C++中的System函数 system函数 是可以调用一些DOS命令,比如 system("cls");//清屏,等于在DOS上使用cls命令 下面列出常用的DOS命令,都可以用system函数调用:

    C++函数库大全C++函数库大全

    C++函数库大全C++函数库大全C++函数库大全

    c++字符串操作函数集合整理

    c++字符串操作函数集合整理c++字符串操作函数集合整理

    c++虚函数与虚函数表

    学习 C++ 的同志不知道有没有和我一样遇到过这样的困惑:C++中的虚函数到底怎么实现的?在各种继承关系中,虚函数表的结构到底是什么样的?曾经我是很想当然,可是后来在使用ATL的过程中,我发现并不是我想的那样。...

    C++调用C函数实例详解

    C++调用C函数实例详解 前言:以前见到extern “C”这样的语句,只是简单地知道跟外部链接有关,但是没有深刻理解它的意思。 首先,为什么要使用extern “C”修饰符? C++调用其它语言的函数,由于编译器生成函数的...

    c++常用三角函数分享交流学习

    c++常用三角函数,入门基础练习

Global site tag (gtag.js) - Google Analytics