lambda 表达式定制操作
泛型算法中的定制操作
许多算法都会比较输入序列中的元素以达到排序的效果,通过定制比较操作,可以控制算法按照编程者的意图工作。
- 普通排序算法:
template<class RandomIterator> void sort(RandomIterator first,RandomIterator last){if(first >= last || first + 1 == last)return;if(last - first <= 20) return bubble_sort(first,last,pred);auto mid = mid3(first,last-1,pred); //mid3 is unknow,is a function for calculating the mid?while(p1 < p2){while(pred(*p1,mid)&&(p1<p2)) ++p1;while(!pred(*p2,mid)&&(p1<p2)) --p2;if(p1 < p2){swap(*p1,*p2);}}swap(*p1,*(last-2)); //what is sort ? sort(first,p1,pred);sort(p1+1,last,pred); }
- 排序算法的定制操作
排序算法只能由小到大。
二排序算法的定制操作,多了一个类型BinaryPredicate,可以用来定制规则。
template<class RandomIterator,class BinaryPredicate> void sort(RandomIterator first,RandomIterator last,BinaryPredicate){if(first >= last || first + 1 == last)return;if(last - first <= 20)return bubble_sort(first,last,pred);auto mid = mid3(first,last,pred);auto p1 = first, p2 = last - 2;while(p1 < p2){while(pred(*p1,mid) && (p1 < p2)) ++p1;while(!pred(*p1,mid) && (p1 < p2)) --p2;if(p1 < p2){swap(*p1,*p2);}}swap(*p1,*(last-2));sort(first,p1,pred);sort(p1+1,last,pred); }
谓词:相当于一个动作,比如一个需求,希望从大到小,则可以先定义一个谓词(函数)
bool cmp(const int& v1,const int &v2){
return v1 > v2;
}
sort(v.begin(),v.end(),cmp);
将该函数传递给sort算法时,就可以从小到大排序了。
lambda表达式:
在前面的例子中,定义了一个函数传递给sort算法,这个函数可以重复使用还好,如果使用一次的话就很麻烦。
这种情况下lambda就可以用上了,它相当于谓语,没有定义函数。
sort(v.begin(),v.end(),[]cmp(const int& int v1,const int& v2){
return v1 > v2;
}
---------------------------------------------------------------------------------------------------------------------
实验楼出品
转载于:https://www.cnblogs.com/wanghao-boke/p/10491284.html
lambda 表达式定制操作相关推荐
- Util应用程序框架公共操作类(八):Lambda表达式公共操作类(二)
前面介绍了查询的基础扩展,下面准备给大家介绍一些有用的查询封装手法,比如对日期范围查询,数值范围查询的封装等,为了支持这些功能,需要增强公共操作类. Lambda表达式公共操作类,我在前面已经简单介绍 ...
- java 8 lambda表达式list操作分组、过滤、求和、最值、排序、去重
java8的lambda表达式提供了一些方便list操作的方法,主要涵盖分组.过滤.求和.最值.排序.去重.跟之前的传统写法对比,能少写不少代码. 新建实体类 package com.vvvtimes ...
- Java 8 Lambda 表达式Stream操作
在jdk1.8新的stream包中针对集合的操作也提供了并行操作流和串行操作流.并行流就是把内容切割成多个数据块,并且使用多个线程分别处理每个数据块的内容. 优点: Stream API可以极大提高J ...
- C++11中的Lambda表达式
本文地址:http://www.cnblogs.com/archimedes/p/c11-lambda.html,转载请注明源地址. "Lambda 表达式"(lambda exp ...
- java8 lambda python_【学习笔记】java8 Lambda表达式语法及应用
本文是慕课网大牧莫邪老师的视频教程一课掌握Lambda表达式语法及应用的学习笔记.如果觉得内容对你有用,可以购买老师的课程支持一下,课程价格1元,十分良心了. 1. 课程介绍 2. 为什么引入Lamb ...
- 1.1 lambda表达式
一.处理匿名内部类 1.Runnable接口 1 new Thread(new Runnable() { 2 public void run() { 3 System.out.println(&quo ...
- lamda获取参数集合去空_(转)Java8使用lambda表达式进行集合的遍历
本文转自 我们经常会用到各种集合,数字的,字符串的还有对象的.它们无处不在,哪怕操作集合的代码要能稍微优化一点,都能让代码清晰很多.在这章中,我们探索下如何使用lambda表达式来操作集合.我们用它来 ...
- Java讲课笔记17:Lambda表达式
文章目录 零.本讲学习目标 1.理解Lambda表达式的作用 2.掌握Lambda表达式的操作(遍历.过滤.提取) 一.Lambda表达式入门 1.匿名内部类的缺点 2.JDK1.8提供的解决方案 3 ...
- lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
最新文章
- 团队-科学计算器-模块测试过程
- 以列表形式输出_python格式化输出总结
- 阿里云开源的Blink,计算能力很疯狂:一眨眼,全部都算好!
- 软件架构(7)---软件架构设计-五视图方法论
- 通过命令行编译器来编译运行程序
- 使用JDK中的 keytool【创建证书】・【查看】・【使用】
- 但是在公司开空调睡觉还是冷
- tab点击一个按钮切换排序_Axure8原型教程:实现Tab选项切换
- 怎么用python编写个apk_python自动安装apk文件
- Ubuntu20.04安装过程 【磁盘分区】
- php同步登录,UCenter单点登录/同步登录/同步登出实例_PHP教程
- 整理wind商誉数据2016-2019
- 乐观的态度使工作充满激情
- 沐阳从0到1零基础学习安卓逆向
- joint_state_publisher_gui
- 系统调优之四大天王——快来瞧瞧~
- Linux管道初步了解
- 关于LAMMPS能量最小化
- CSDN 富文本编辑器和 Markdown 编辑器使用 Word 支持的 LaTx 语法公式
- USB运动控制 (五轴雕刻机系统)全部开源 不保留任何关键技术
热门文章
- C++ namespace
- 要想能安心,必须先死心。
- Struts2初始化流程及源码分析
- android 如何extends 多个,Android多线程:继承Thread类 使用解析(含实例教程)
- 服务器如何查看gpu型号,linux 查看服务器gpu
- 更改mysql数据库存放位置_更改mysql数据库存放位置
- js实现oss批量下载文件_js下载文件到本地各种方法总结
- android studio gradle 学习,学习Android Studio里的Gradle
- c# 口口乱码_c# 乱码解决方法
- 县级的图书馆计算机管理员,图书馆管理员的岗位职责