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

本文介绍了C++中函数对象的概念,包括仿函数的定义,如何通过重载operator()实现,以及它们在STL算法中的应用,如sort函数中的使用示例。标准库中预定义的函数对象如greater_equal也被详细讨论。
摘要由CSDN通过智能技术生成

回顾

函数对象/也叫仿函数

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

一般的说法,只是认为 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>());
}

看一下,目前的进度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值