第九层(10):STL之函数对象

简介: 第九层(10):STL之函数对象

前情回顾


在上一块石碑中,我学到了map/multimap,同时下一块石碑也显露出来…


🚄上章地址:第九层(9):STL之map/multimap


函数对象


概念


操作符重载的类,其实例化出来的对象被叫做函数对象

函数对象在重载()时,行为时类似函数调用,也叫仿函数


特点


函数对象在使用时,可以和普通函数一样去调用,也可以有返回值

函数对象可以有自己的状态

函数对象可以作为参数去传递


谓词


概念


返回值为bool类型的仿函数就时谓词,可以根据仿函数的参数分为:一元谓词和二元谓词,谓词常用在算法当中,当参数去传递,当条件去使用


内建函数对象


内建函数对象指的是C++在STL中建立的一些函数对象,可以直接调用使用,使用与函数时一样的,但是在使用的时候要基地引入头文件

#include<functional>


分类


内建函数对象分为三类:

1算术仿函数

2关系仿函数

3逻辑仿函数


算术仿函数


在内建函数对象中提供了算术仿函数,它可以实现四则运算,还有取模和取反的操作

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>
#include<iostream>
using namespace std;
int _a, _b;
void test1()
{
  //加法
  plus<int> a;
  cin >> _a >> _b;
  int add = a(_a, _b);
  cout <<"相加后:" << add << endl;
  //减法
  minus<int> b;
  cin >> _a >> _b;
  int min = b(_a, _b);
  cout <<"相减后:" << min << endl;
  //乘法
  multiplies<int> c;
  cin >> _a >> _b;
  int mul = c(_a, _b);
  cout <<"相乘后:" << mul << endl;
  //除法
  divides<int> d;
  cin >> _a >> _b;
  int div = d(_a, _b);
  cout << "相除后" << div << endl;
  //取模
  modulus<int> e;
  cin >> _a >> _b;
  int mod = e(_a, _b);
  cout <<"取模后:" << mod << endl;
  negate<int> f;
  cin >> _a;
  int neg = f(_a);
  cout <<"取反后:" << neg << endl;
}
int main()
{
  test1();
  return 0;
}

0a2653c851af460fa595bd959398a8f1.png


关系仿函数


可以用于比较,比如在排序的时候,像从大到小排,就可以使用大于的仿函数

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


当前者大于后者时候,返回真,小于时返回假,通常可以搭配排序算法去使用


逻辑仿函数


逻辑仿函数指的是与或非三种逻辑

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


实际用途不大,但是在特定的题中使用可以方便很多


下一座石碑


这座石碑倒下了,露出了下一座石碑…


😘预知后事如何,关注新专栏,和我一起征服C++这座巨塔

🚀专栏:C++爬塔日记

🙉都看到这里了,留下你们的👍点赞+⭐收藏+📋评论吧🙉


相关文章
|
12月前
|
自然语言处理 搜索推荐 数据可视化
2024高效年终总结:用看板工具和GRAI方法提升效率
本文介绍如何用看板管理帮助团队做出有亮点、有逻辑、有冲突、有方案的年终总结,并提供5种工作总结SOP模板,如GRAI复盘法、SCQA表达法等,使总结更有条理、更有说服力。
404 8
2024高效年终总结:用看板工具和GRAI方法提升效率
|
11月前
|
存储 架构师 容灾
阿里云基础设施高可用最佳实践沙龙上海站圆满举办!
2025年1月9日,阿里云在上海虹桥绿地铂瑞酒店成功举办基础设施高可用最佳实践沙龙NO.2。活动吸引了华东地区多家企业的CTO、架构师和技术从业者参与。专家们分享了高可用的基础知识、分级标准及云端架构实战经验,涵盖计算、存储、网络和云原生等领域,重点讨论了企业如何在阿里云上构建高可用数据中心。现场互动热烈,参会者与专家深入交流,探讨技术应用与合作机会。
|
人工智能 安全 搜索推荐
AI与能源管理:智能电网的未来
本文探讨了AI与智能电网的融合及其对能源管理的深远影响。智能电网利用先进的信息、通信和AI技术,实现电力的自主、智能化、高效管理。AI在精准预测电力需求、实时监测与故障诊断、智能能源调度、个性化能源服务和优化可再生能源利用等方面发挥关键作用,推动能源管理的高效、智能和可持续发展。
|
运维 Kubernetes API
k8s临时容器ephemeral
k8s临时容器ephemeral
|
Java 数据库连接 Apache
java编程语言常用框架有哪些?
Java作为一种广泛使用的编程语言,拥有众多常用框架,这些框架帮助开发者提高开发效率和代码质量。
367 3
|
存储 前端开发 JavaScript
前端代码托管:存储库管理综合指南
前端代码托管:存储库管理综合指南
292 0
|
SQL 人工智能 前端开发
前端问题之前端在AIGC领域可以承担哪些工作
前端在AIGC领域可以承担哪些工作
332 0
|
人工智能 自然语言处理 搜索推荐
AIGC工具——Runway
【1月更文挑战第12天】AIGC工具——Runway
570 2
AIGC工具——Runway
|
SQL 前端开发 Java
基于Java的宠物领养管理网站系统设计与实现
基于Java的宠物领养管理网站系统设计与实现
388 1