当前位置:网站首页>【STL源码剖析】仿函数(待补充)
【STL源码剖析】仿函数(待补充)
2022-07-02 22:13:00 【Cloudeeeee】
7.1 仿函数(fuctors)概观
仿函数的作用:
STL中提供的各种算法,往往有两个版本,其一就是最直观的默认的运算,其二则是运行用户以 “template参数来指定所要采取的策略” 。例如accumulate(),第一个版本是将指定范围内的所有元素相加,第二个版本则可以传入用户指定的操作,来替换这个相加的过程。
要将这种指定的操作当做算法的参数传入算法,唯一的办法是将该操作设计为一个函数,再将函数指针当做算法的一个参数;或者将该操作设计为一个仿函数(实质上是一个class对象),再以该仿函数创建一个对象作为函数的参数传入函数中。
仿函数的实质是一个行为类似于函数的对象,为了能够模拟函数的调用,仿函数就必须重载function call运算符 ,即小括号、operator(),因此我们就可以在仿函数对象后加上(),从而能够调用仿函数所定义的operator()。
STL仿函数的分类:
- 根据操作数的个数:一元、二元
- 根据功能:算术运算、关系运算、逻辑运算
任何程序想要使用STL内建的仿函数,都必须含有< functional >头文件。
仿函数的使用方法:
7.2 可配接(Adaptable)的关键
STL 仿函数应该具备被函数配接器(function adapter)修饰的能力,因此每一个仿函数都必须定义自己的相应型别,就像迭代器定义的五个相应型别一样,这些相应型别是为了让配接器能够取出获得仿函数的某些信息。相应的型别都是一些 typedef 操作,该操作在编译期就执行完毕了,不会对程序的执行效率产生影响,不带来任何额外负担。
仿函数的相应型别主要用来表现函数参数型别和返回值型别,< stl_function.h > 中分别定义了一元仿函数和二元仿函数的基类 unary_function、binary_function,任何仿函数只要依个人需求选择继承其中的一个仿函数,便自动拥有了那些相应型别,也就自动拥有了配接能力。
7.2.1 unary_function
unary_function用来呈现一元仿函数的参数型别及返回值型别:
7.2.2 binary_function
binary_function用来呈现二元仿函数的第一个参数的型别、第二个参数的型别及返回值型别:
边栏推荐
- Eight honors and eight disgraces of the programmer version~
- Learning Websites commonly used by circuit designers
- Brief introduction of emotional dialogue recognition and generation
- 高数有多难?AI 卷到数学圈,高数考试正确率 81%!
- Introduction to the latest plan of horizon in April 2022
- Which common ports should the server open
- 容器化技术在嵌入式领域的应用
- Go language sqlx library operation SQLite3 database addition, deletion, modification and query
- 移动端 1px 像素兼容性问题,实现1px 边框
- Successfully changed Splunk default URL root path
猜你喜欢
潘多拉 IOT 开发板学习(HAL 库)—— 实验4 串口通讯实验(学习笔记)
Configuration clic droit pour choisir d'ouvrir le fichier avec vs Code
The concepts of terminal voltage, phase voltage and line voltage in FOC vector control and BLDC control are still unclear
Win11麦克风测试在哪里?Win11测试麦克风的方法
为什么RTOS系统要使用MPU?
Value sequence < detailed explanation of daily question >
解决:exceptiole ‘xxxxx.QRTZ_LOCKS‘ doesn‘t exist以及mysql的my.cnf文件追加lower_case_table_names后启动报错
力扣刷题(2022-6-28)
Why does RTOS system use MPU?
Redis expiration policy +conf record
随机推荐
数字图像处理实验目录
Typical case of data annotation: how does jinglianwen technology help enterprises build data solutions
Redis expiration policy +conf record
Call vs2015 with MATLAB to compile vs Project
Motivation du Protocole de chiffrement avancé AES
阿里云有奖体验:如何使用 PolarDB-X
Alibaba cloud award winning experience: how to use polardb-x
Use the scroll bar of souI when using the real window in souI
Explain promise usage in detail
@BindsInstance在Dagger2中怎么使用
Splunk audit setting
Boost库链接错误解决方案
BBR encounters cubic
Golang common settings - modify background
基于Pyqt5工具栏按钮可实现界面切换-2
解决:exceptiole ‘xxxxx.QRTZ_LOCKS‘ doesn‘t exist以及mysql的my.cnf文件追加lower_case_table_names后启动报错
抖音实战~点赞数量弹框
golang中new与make的区别
Pytorch training CPU usage continues to grow (Bug)
Doorplate making C language