当前位置: 首页 > article >正文

112 C++ STL 函数对象回顾,系统函数对象以及范例

回顾

函数对象/也叫仿函数

如下的这几类都叫做函数对象。

一般的说法,只是认为 Teacher重写了operator()()的才是仿函数,

Teacher tea;

tea();//实际上调用了operator()(),tea()看起来像一个函数调用,因此叫做仿函数。

实际上 可以将 函数,可调用对象,lambda表达式都看成是函数对象,或者仿函数。

函数对象 function object

仿函数 functors

在STL 中函数对象一般来说,仿函数都是和算法配合一起使用,从而实现一些特定的功能。

也就是说:这些函数对象主要是用来服务于算法

#include <algorithm>

//仿函数回顾,从下面对于 operator()()的重载可以看出,仿函数的作用很多,
//如下的例子只是在sort 算法的时候做为第三个参数使用的情况
class Teacher7 {
public:
	Teacher7() {

	}
	~Teacher7(){

	}
	Teacher7(const Teacher7 &obj) {
		this->mage = obj.mage;
	}
	Teacher7 operator= (Teacher7  &obj) {
		this->mage = obj.mage;
		return *this;
	}
	//重写了operator ()函数的类,就是仿函数
	bool operator()(int i, int j) {
		return i > j;
	}

	//仿函数可以重载
	int operator()(int i) {
		return i + 10;
	}

	int mage;
};

void main() {
	bool rese = Teacher7()(2,3);
	cout << "rese = " << rese << endl;
	vector<int> myvector1 = { 30,20,800,60,90890,989898 };
	Teacher7 tea;
	sort(myvector1.begin(), myvector1.end(),tea);
	for (auto it = myvector1.begin(); it != myvector1.end(); ++it) {
		cout << "   " << *it;
	}
}

标准库中定义的函数对象

标准库中也给我们提供了很多可以现成拿来使用的函数对象。

要使用这些现成的 函数对象,要包含一个头文件  functional

#include <functional>

标准库中定义的函数对象范例

#include <algorithm>
#include <functional>

void main() {

	vector<int> vec = { 68,98,56,93569,89898 };
	sort(vec.begin(), vec.end(), greater_equal<int>());
	//sort 是算法,需要三个参数,第一个和第二个是容器的iterator- 代表范围,第三个参数我们这里使用的是 C++编译器自带的 函数对象
	//greater_equal<int> 是类,greater_equal<int>()临时对象
	for (auto it = vec.begin(); it != vec.end(); ++it) {
		cout << "   " << *it;
	}
	//93569   89898   98   68   56
	greater_equal<int> aa;
	sort(vec.begin(), vec.end(), aa);
	//把 greater_equal<int>看成一个类, aa就是这个类的实例
	//就像Teacher7 是一个类,Teacher7 bb; bb就是这个类的实例
	sort(vec.begin(), vec.end(), Teacher7());
	sort(vec.begin(), vec.end(), greater_equal<int>());
}

看一下,目前的进度。


http://www.kler.cn/a/229981.html

相关文章:

  • 精通高并发,需要掌握哪些知识
  • CTF之密码学(摩斯密码)
  • 【大数据学习 | Spark-SQL】Spark-SQL编程
  • Flink CDC 使用实践以及遇到的问题
  • 去哪儿大数据面试题及参考答案
  • C#中面试的常见问题005
  • 微服务限流(漏桶算法、令牌桶算法)
  • 时间序列(Time-Series)FourierCorrelation.py代码解析
  • MongoDB 字段中数据类型不一致序列化异常排查与处理
  • 20240206在WIN10下下载安装RX580的驱动程序
  • 新概念英语第二册(56)
  • leetcode(双指针)283.移动零(C++)DAY3
  • C++多线程:this_thread 命名空间
  • 瑞_23种设计模式_原型模式
  • 京东广告算法架构体系建设--大规模稀疏场景高性能训练方案演变
  • UE5 虚幻游戏报错常用解决方法(幻兽帕鲁UE5报错)
  • 关于ZYZ旋转和XYZ旋转
  • 介绍 MSTest Runner – CLI、Visual Studio 等
  • 前端实现搜索框筛选
  • 【DDD】学习笔记-数据模型与对象模型
  • 微信小程序for循环嵌套
  • 使用STM32 HAL库配置和控制外设接口
  • 【SQL高频基础】1141.查询近30天活跃用户数
  • 基于SSM的实习管理系统(有报告)。Javaee项目。ssm项目。
  • vue2 自定义指令 v-highlight 文本高亮显示分享
  • 常用加密算法