C++ 回调函数、仿函数和lambda表达式

本文介绍了C++中的回调函数、仿函数和lambda表达式。回调函数通过函数指针实现解耦,常用于排序规则的定制。仿函数,即函数对象,通过重载操作符实现类似函数的行为,可以保持内部状态。C++11引入的lambda表达式简化了代码,允许直接在函数调用中定义匿名函数,并能捕获上下文变量,常用于替代仿函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回调函数

回调函数是C语言中就有的一种函数。根据百度百科回调函数的定义:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

通过使用回调函数,可以把我们需要调用的函数和我们需要调用的函数需要调用的我们的函数分开,以达到程序解耦的目的。

如下是一个排序的使用回调函数的简单的例子:

#include <iostream>
using namespace std;

//交换函数
template <typename T>
inline void Swap(T& num1, T& num2)		//交换
{
   
	T tempnum = num1;
	num1 = num2, num2 = tempnum;
}

//普通排序,默认升序
template <typename T>
void Sort(T* left, T* right)
{
   
	if (left >= right) return;

	T* i = left;
	T* j = right;

	T base = *left;

	while (i < j)
	{
   
		while (i < j && base <= *j) j--;

		while (i < j && base >= *i) i++;

		if (i >= j) continue;

		Swap(i, j);
	}

	*left = *i;
	*i = base;

	Sort(left, i - 1);
	Sort(j + 1, right);
}

//三个参数自定义规则排序重载
template <typename T, typename Callback>
void Sort(T* left, T* right, Callback funptr)
{
   
	if (left >= right) return;

	T* i = left;
	T* j = right;

	T base = *left;

	while (i < j)
	{
   
		while (i < j && funptr(base, *j)) j--;

		while (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值