1 挑选最大值最小值函数

注意:上面的函数都有两个版本,需要注意区别:
版本1:传入引用,返回引用
namespace std{template <typename T>const T& min(const T& a, const T& b);}
版本2:传入初始化列表,返回值的拷贝,函数内部需要一块临时空间保存初始化列表的内容
namespace std{template <typename T>T min(initializer_list<T> initlist);}
使用示例:
int main(){int x = 17;int y = 42;int z = 33;//调用min第一版本cout << min(17, 42) << endl;cout << min(x, y) << endl;//调用min第二版本cout << min({x, y, z}) << endl;}
2 两值互换函数
std::swap函数可以方便的进行两值互换,其泛化实现为(利用了move语义):
namespace std{template <typename T>inline void swap (T& a, T& b){T tmp(std::move(a));a = std::move(b);b = std::move(tmp);}}
swap要求:
- T 必须满足可移动赋值 (MoveAssignable) 和 可移动构造 (MoveConstructible) 的要求。
- T2 必须满足可交换 (Swappable) 的要求。
swap还提供了复杂类型的特化版本,比如支持vector,array等类型:
