美文网首页
32 STL (十)函数对象

32 STL (十)函数对象

作者: ca8519be679b | 来源:发表于2021-01-28 22:25 被阅读0次

函数对象概念

()重载的类,实现函数功能,和我们之前讲的仿函数是一个东西,可以有参数,也可以有返回值,因为还可以记录类属性,也可以作为参数给成员函数调用

1

如上,我们实现了自定义的加法和自定义的打印,当然我们也可以接下来加上自定义属性。如输出调用次数

2

如上,加上自定义属性,输出统计次数

谓词

3

如上,我们给出定义,返回bool类型仿函数称为谓词,接收一个参数叫做一元谓词,接收2个叫做二元谓词

4

我们这里借助algorithm模块的find_if实现条件查找,其3个参数,分别为迭代器起始,及谓词仿函数,我们这里就把找到>5的元素作为bool真,其返回对象是迭代器,我们比较和end()是否相等,这里需要注意的是仿函数是实例后的结果,我们要传入一个实例,使用匿名对象

5

我们之前set章节也用过,sort排序传入仿函数,就是二元谓词

内建函数对象:算数仿函数

STL其实已经给我们内建了很多仿函数,我们只需要导入<functional>

6

如上,其中negate是一元仿函数,其他都是二元仿函数,当然上面的仿函数都是STL给提供好的,你想用也许,不用也可以自己定义

7

如上,我们就可以简单的使用自带的一些仿函数,这里当然模板默认都是一个类型,所以<>里只输入一个类型即可

关系仿函数

8

如上,有一些返回bool的仿函数,里面greater比较常用

9

如上,我们实现给vector排序,使用algorithm算法,需要传入仿函数,如上,我们实现逆序排序

10

当然我们也可以使用functional给我们的greater仿函数,这里需要注意别忘了指定<>里的类型

11

我们可以看sort方法,如果不传第三个参数,是走的下面的模板重载,可以看到默认使用的就是less升序

逻辑仿函数

12

逻辑仿函数就是与或非,平时用的都不多,这里按逻辑非给讲下,比如我们v1容器都是bool型,然后我们想创建v2容器,将v1容器的每个取反放到v2里

13

如上,这里我们还学到了一个方法transform,可以将一个容器的内容按规则给另一个容器,其中参数分别为第一个容器的起始,和第二个容器的开始,以及对应得仿函数实例

相关文章

  • 32 STL (十)函数对象

    函数对象概念 ()重载的类,实现函数功能,和我们之前讲的仿函数是一个东西,可以有参数,也可以有返回值,因为还可以记...

  • 【Effective STL(6)】仿函数、仿函数类、函数等

    38 把仿函数类设计为用于值传递 STL函数对象在函数指针之后成型,因此STL习惯传给函数和从函数返回时,函数对象...

  • STL函数对象

    输出:

  • 一些面试题记录

    STL1、对STL有哪些了解2、STL中的内存管理3、什么是函数对象,用在哪些情况4、用过哪些STL算法5、基本容...

  • STL算法之函数对象

    概述 函数对象又叫仿函数:重载了函数调用运算符()的类实例化的对象。该对象和()结合触发operator()函数的...

  • STL学习笔记之算法(二)

    仿函数、仿函数类、函数等 条款38:把仿函数类设计为用于值传递 STL中的习惯是当传给函数和从函数返回时函数对象也...

  • C++笔记九(STL与泛型编程)

    本周内容(1)迭代器的分类(category)(2)迭代器分类对算法的影响(3)STL算法(4)仿函数/函数对象(...

  • GeekBand-STL 第2周

    stl的整体结构: 内存分配器,迭代器,容器,仿函数,算法,适配器 仿函数与函数的区别:本质是一个对象,opera...

  • boost::ref

    背景 STL和Boost中的算法和函数大量使用了函数对象作为判断式或谓词参数,而这些参数都是传值语义,算法或函数在...

  • STL:

    STL 算法的操作参数可以用函数对象, 也可以用函数指针: (模板)函数实参推断可以推断出操作实参的类型 不用记算...

网友评论

      本文标题:32 STL (十)函数对象

      本文链接:https://www.haomeiwen.com/subject/qvvnzktx.html