前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++】:lambda表达式的高级应用

【C++】:lambda表达式的高级应用

作者头像
用户11173787
发布2024-10-09 14:01:47
850
发布2024-10-09 14:01:47
举报
文章被收录于专栏:破晓

引言

今天 我们来见见lambda表达式的高级用法

用法1:自定义删除器

有些类型的delete方法并不符合自身的析构方法,这时我们就需要自定义删除器。

代码语言:javascript
复制
unique_ptr<FILE> ptr1(fopen("data.txt","w"));

这样写对吗?答案是不对的,因为unique_ptr的删除方式是delete,但是这里我们需要fclose(ptr1)。 所以我们可以这样做:

代码语言:javascript
复制
	unique_ptr<FILE, function<void(FILE*)>>ptr1(fopen("data.txt", "w"), [](FILE* ptr) {fclose(ptr); });

使用lambda做一个自定义删除器。

用法2:priority_queue

我们知道:priority_queue的底层要对数据进行比较,以我们需要传入相对应的比较方式:

代码语言:javascript
复制
class Data
{
public:
	Data(int ma,int mb)
		:ma_(ma),mb_(mb)
	{}

	int ma_;
	int mb_;
};
int main()
{
	using FUNC = function<bool(Data&, Data&)>;
	priority_queue<Data, vector<Data>, FUNC> maxHeap([](Data& d1, Data& d2)->bool
		{
			return d1.ma_ > d2.ma_;
		});
	maxHeap.push(Data(10, 10));
	maxHeap.push(Data(20, 20));
}

这样,我们修改lambda表达式即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 用法1:自定义删除器
  • 用法2:priority_queue
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档