php 匿名函数 递归,匿名函数,lambda_C++ lambda 递归调用,匿名函数,lambda,c++ - phpStudy...

C++ lambda 递归调用

自己敲的一个归并排序,C++11

#include

#include

using namespace std;

template

void merge_sort(T lst[], int length) {

/*

* 功能:对序列 lst 进行归并排序,自顶向下,递归操作

* 参数:lst:序列指针;length:序列长度

* 返回值:无

*/

// 申请临时空间

T *tmp = new T[length];

auto merge = [&lst, &tmp](auto &&self, int first, int first_tail, int second, int second_tail) -> void {

// 存在任一子串的长度大于 2 ,则将其拆分成两个子串归并

int mid = 0;

if (first_tail - first > 1) {

mid = (first_tail + first) / 2;

self(self, first, mid, mid, first_tail);

}

if (second_tail - second > 1) {

mid = (second_tail + second) / 2;

self(self, second, mid, mid, second_tail);

}

// 临时空间的索引

int i = 0;

// 归并操作,两个序列均未取完,则先取小的

while (first < first_tail && second < second_tail) {

tmp[i++] = lst[first] < lst[second] ? lst[first++] : lst[second++];

}

// 存在一个序列已经取完,则将另一序列剩下的元素取尽

while (first < first_tail) tmp[i++] = lst[first++];

while (second < second_tail) tmp[i++] = lst[second++];

// 回填

while (i--) lst[--second_tail] = tmp[i];

};

// 调用

merge(merge, 0, length, length, length);

// 删除申请的空间

delete[] tmp;

}

int main() {

int length = 100;

int *lst = new int[length];

for (int i = 0; i < length; i++) {

lst[i] = rand() % length + 1;

}

merge_sort(lst, length);

for (int i = 0; i < length; i++) {

cout << lst[i] << " ";

}

return 0;

}

其中关于 merge 函数的递归调用我是通过传递函数指针来实现的,想问下各位大牛有没有什么更优雅一点的写法,比如说直接通过 capture 将函数指针捕获到。

相关阅读:

webpack热加载正常 页面刷新报错

vuejs 中的.native原生事件是什么意思?如何使用?

如何用$elemMatch返回数组中多条数据

vscode的目录树怎么选中多文件

实现CPU与外部设备并行工作的硬件设备是?

文本中没有添加换行属性;出现强制换行是什么原因

js代码和html写在一起的,怎么用babel编译js代码?

利用extract-text插件打包css出错

关于在闭包中使用AJAX保存数据时,不执行success回调,直接return的问题。

::selection 选择器使用遇到的问题

把ID名作为参数传到函数里,使用不了?

webstorm live templates jar 怎么生成

ie9下诡异的问题

如何在一张大图中确认一个位置作为按钮,同时在不同手机屏幕上都能正常显示呢?

mui框架app怎么连接蓝牙打印机并打印?求代码?

Wordpress从http转到https,其他页面都是好的,就category页面还是请求的http下的js和css资源

docker 下面创建的IMAGE 他们的 ID 一样?这个是怎么回事????

阳历转农历的算法是什么啊, 怎么算啊

vue怎么给div绑定blur事件

mysql语句,事务处理回滚的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值