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;
}
---------------------------------------------------------------------------------------------------------------------
实验楼出品
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2018-03-07 1046. Shortest Distance (20)
2018-03-07 1042. Shuffling Machine (20)
2018-03-07 1003. Emergency (25)