首页 > 其他分享 >STL- 函数对象

STL- 函数对象

时间:2023-08-29 22:11:53浏览次数:45  
标签:函数 4.3 STL 对象 bool template 谓词

4 STL- 函数对象

4.1 函数对象

4.1.1 函数对象概念

概念:

  • 重载函数调用操作符的类,其对象常称为函数对象
  • 函数对象使用重载的()时,行为类似函数调用,也叫仿函数

本质:

函数对象(仿函数)是一个,不是一个函数

4.1.2 函数对象使用

特点:

  • 函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值
  • 函数对象超出普通函数的概念,函数对象可以有自己的状态
  • 函数对象可以作为参数传递

总结:

  • 仿函数写法非常灵活,可以作为参数进行传递。

4.2 谓词

4.2.1 谓词概念

概念:

  • 返回bool类型的仿函数称为谓词
  • 如果operator()接受一个参数,那么叫做一元谓词
  • 如果operator()接受两个参数,那么叫做二元谓词

4.2.2 一元谓词

总结:参数只有一个的谓词,称为一元谓词

4.2.3 二元谓词

总结:参数只有两个的谓词,称为二元谓词

4.3 内建函数对象

4.3.1 内建函数对象意义

概念:

  • STL内建了一些函数对象

分类:

  • 算术仿函数

  • 关系仿函数

  • 逻辑仿函数

用法:

  • 这些仿函数所产生的对象,用法和一般函数完全相同
  • 使用内建函数对象,需要引入头文件 #include<functional>

4.3.2 算术仿函数

功能描述:

  • 实现四则运算
  • 其中negate是一元运算,其他都是二元运算

仿函数原型:

  • template<class T> T plus<T> //加法仿函数
  • template<class T> T minus<T> //减法仿函数
  • template<class T> T multiplies<T> //乘法仿函数
  • template<class T> T divides<T> //除法仿函数
  • template<class T> T modulus<T> //取模仿函数
  • template<class T> T negate<T> //取反仿函数

总结:使用内建函数对象时,需要引入头文件 #include <functional>

4.3.3 关系仿函数

功能描述:

  • 实现关系对比

仿函数原型:

  • template<class T> bool equal_to<T> //等于
  • template<class T> bool not_equal_to<T> //不等于
  • template<class T> bool greater<T> //大于
  • template<class T> bool greater_equal<T> //大于等于
  • template<class T> bool less<T> //小于
  • template<class T> bool less_equal<T> //小于等于

总结:关系仿函数中最常用的就是greater<>大于

4.3.4 逻辑仿函数

功能描述:

  • 实现逻辑运算

函数原型:

  • template<class T> bool logical_and<T> //逻辑与
  • template<class T> bool logical_or<T> //逻辑或
  • template<class T> bool logical_not<T> //逻辑非

总结:逻辑仿函数实际应用较少,了解即可

标签:函数,4.3,STL,对象,bool,template,谓词
From: https://www.cnblogs.com/ljh2487/p/17665968.html

相关文章

  • 函数模板
    1模板1.1模板的概念模板就是建立通用的模具,大大提高复用性模板的特点:模板不可以直接使用,它只是一个框架模板的通用并不是万能的1.2函数模板C++另一种编程思想称为泛型编程,主要利用的技术就是模板C++提供两种模板机制:函数模板和类模板1.2.1函数模板语法函......
  • STL初识
    2STL初识2.1STL的诞生长久以来,软件界一直希望建立一种可重复利用的东西C++的面向对象和泛型编程思想,目的就是复用性的提升大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作为了建立数据结构和算法的一套标准,诞生了STL2.2STL基本概念STL(......
  • 类和对象
    4类和对象C++面向对象的三大特性为:封装、继承、多态C++认为万事万物都皆为对象,对象上有其属性和行为4.1封装4.1.1封装的意义封装是C++面向对象三大特性之一封装的意义:将属性和行为作为一个整体,表现生活中的事物将属性和行为加以权限控制封装意义一:总结:子类对象......
  • 函数提高
    3函数提高3.1函数默认参数在C++中,函数的形参列表中的形参是可以有默认值的。语法:返回值类型函数名(参数=默认值){}3.2函数占位参数C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置语法:返回值类型函数名(数据类型){}在现阶段函数的占位参......
  • 面向对象基础
    面相对象基础定义类是共同特征的描述、对象是真实存在的具体实例用来描述一类事物的类叫javabean类,javabean类中不写main方法,编写main方法的类叫测试类,可以在测试类中创建javabean类的对象并赋值调用一个java文件中可以定义多个class类,而且只能有一个是public修饰,public修饰......
  • UE如何制作C++函数事件蓝图
    一.蓝图类中的函数在新建的actor中的C++ .h文件中,声明UFUNCTION(BlueprintCallable,Category="XXXX"),然后在.cpp中写函数的内容即可。编译后用蓝图继承C++类,可以进行函数的调用了二.建立函数库任意蓝图可以调用建立BlueprintFunctionLibrary的C++类,参考一中进行函数......
  • C++虚函数 覆盖(重写)
    1、虚函数  在成员函数前面加virtual后,该函数就称为虚函数,此时该类就会像虚继承一样多了一个虚表指针(虚函数表指针、虚指针)2、虚函数表  虚表指针指向的是属于该类的一张表格的首地址,该表格中记录了该类中所有虚函数的首地址    如果类中没有其他成员变......
  • Vue3 响应式工具函数
    isRef()​检查某个值是否为ref。unref()​如果参数是ref,则返回内部值,否则返回参数本身。这是 val=isRef(val)?val.value:val 计算的一个语法糖toRef()​可以将值、refs或getters规范化为refs(3.3+)。也可以基于响应式对象上的一个属性,创建一个对应的ref。这......
  • golang 协程、延迟函数调用、以及恐慌和恢复
    此篇文章将介绍协程和延迟函数调用。协程和延迟函数调用是Go中比较独特的两个特性。恐慌和恢复也将在此篇文章中得到简单介绍。本文并非全面地对这些特性进行介绍,后面的其它文章会陆续补全本文的未介绍的内容。协程(goroutine)现代CPU一般含有多个核,并且一个核可能支持多线程。......
  • list集合去除重复对象
    对象重复是指对象里面的变量的值都相等,并不定是地址。list集合存储的类型是基础类型还比较好办,直接把list集合转换成set集合就会自动去除。 当set集合存储的是对象类型时,就需要在对象的实体类里面重写publicbooleanequals(Objectobj){}和publicinthashCode(){}两个方法......