浅谈重载运算符改写函数


前言

随着不断深入学习,STL库的运用不断增加,如何更加灵活利用,重构运算符是一个不错的选择

一、重构运算符是什么?

C++和C一样有很多的操作符,如表示逻辑运算的&,|,~,!以及表示数字运算的+,-,*,/,++,–和表示判断的==,&&,||等等。但是在C中这些符号只能用于处理特定类型的数据,但是在C++中可以对部分的操作符重载。

二、常用一:优先队列priority_queue

1.结构体内部 重构运算符

代码如下(示例):

struct node{
	int num;
	int t;
	friend bool operator<(const node &a1)const
	{
		return num>a1.num;
	}
};

2.结构体外部 重构运算符

代码如下(示例):

bool operator<(const node &a1,const node &a2)
{
	return a1.num>a2.num;
} 

注意,重载运算符是对所有node类型生效,如果是int等原有类型则应该考虑对整体代码其他部分影响。

3.重构比较函数

struct cmp
{
	bool operator() (const int& a1,const int &a2)
	{
		return a1>a2;
	}
};
priority_queue<node, vector<node>, cmp > a;

三.常用二:sort排序

1.结构体内 重构运算符

struct node{
	int num;
	int t;
	bool operator<(const node &a1)const
	{
		return num>a1.num;
	}
};

跟优先队列相比,不用写友元friend

2.结构体外 重构运算符

bool operator<(const node &a1,const node &a2)
{
	return a1.num>a2.num;
} 

3.重构函数

bool cmp(const node &a1,const node &a2)
{
	return a1.num>a2.num;
} 
sort(b,b+3,cmp);

总结

重载运算符对众多STL库函数改写有着便利的作用,是改写函数or重载运算符实现目标,需要结合实际选取最优选择。
特别注意
改写一般只能改<,改>会出现错误。
对于改写<,只会对原来STL函数的结果做一次相反运算。如sort原来是递增,改后为递减;优先队列原来为递减,改后为递增。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值