九、 通用工具 ----辅助函数

5 辅助函数

c++标准库提供了若干小型辅助函数,用来挑选最小值,挑选最大值,交换两个值或者提供增补的比较操作符;

1 挑选最小值和最大值

  1. 一般位于<algorithm>头文件中:
    挑选最大值和最小值
    其中:minmax()和所有带初始化队列(initializer list)的函数位于:【c++11】

说明:

  1. minmax() 返回一个pair<>,其中first是最小值,second是最大值;
  2. 关于双参数版本,如果被比较的二值相等,min()和max()返回第一个元素;
  3. 带(initlist)的版本,返回多个最小值或最大值中的第一个元素;
  4. 两个参数版本返回的是个reference;
  5. 接受(initlist)版本的返回被比较值的拷贝;
template<typename T>
const T& min(const T& a, cosnt T& b);

template<typename T>
T min(initializer_list<T> initlist);

原因:
1. “initlist”版本,器内部需要一块临时空间,如果返回reference,返回的是一个空悬的reference;

2 两值互换(swapping)

  1. swap()模板定义与头文件<utility>
template<typename T>
inline ovid swap(T& a, T& b)...{
    T tmp(std::move(a));
    a = std::move(b);
    b = std::move(tmp);

}

说明:
1. 【c++11】:数值被moved或者move assigned
2. 以前是通过: assigned或copied,定义与头文件<algorithm>;

3 增补的比较操作符

有四个function template 分别定义了!=,>,<=和>=,四个比较操作符;他们都是利用操作符==和<完成的,这四个函数定义与<utility>,定义如下;

// !=
template<tyname T>
inline bool operator!=(const T& x, const T& y)
{
    return !(x==y);
}
// >
template<tyname T>
inline bool operator>(const T& x, const T& y)
{
    return (y<x);
}
//<=
template<tyname T>
inline bool operator<=(const T& x, const T& y)
{
    return !(y<x);
}
//>=
template<tyname T>
inline bool operator>=(const T& x, const T& y)
{
    return !(x<y);
}

说明:
1. 这四个操作符依赖于<和==,因此自己定义<和==
2. 要使用这些操作符,使用using namespace std::rel_ops
例如:

class X{
public :
    bool operator==(cosnt X&x) const;
    bool operator<(const X& x) const;
    ...
};

//...
void foo()
{
    using namespace std::rel_ops; //使用 !=,> ,>=,<=
    X x1,x2;
    ..
    if(x1!=x2){...} //ok
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值