1 挑选最大值最小值函数

image.png
注意:上面的函数都有两个版本,需要注意区别

  • 版本1:传入引用,返回引用

    1. namespace std
    2. {
    3. template <typename T>
    4. const T& min(const T& a, const T& b);
    5. }
  • 版本2:传入初始化列表,返回值的拷贝,函数内部需要一块临时空间保存初始化列表的内容

    1. namespace std
    2. {
    3. template <typename T>
    4. T min(initializer_list<T> initlist);
    5. }

使用示例:

  1. int main()
  2. {
  3. int x = 17;
  4. int y = 42;
  5. int z = 33;
  6. //调用min第一版本
  7. cout << min(17, 42) << endl;
  8. cout << min(x, y) << endl;
  9. //调用min第二版本
  10. cout << min({x, y, z}) << endl;
  11. }

2 两值互换函数

std::swap函数可以方便的进行两值互换,其泛化实现为(利用了move语义):

  1. namespace std
  2. {
  3. template <typename T>
  4. inline void swap (T& a, T& b)
  5. {
  6. T tmp(std::move(a));
  7. a = std::move(b);
  8. b = std::move(tmp);
  9. }
  10. }

swap要求:

  • T 必须满足可移动赋值 (MoveAssignable) 和 可移动构造 (MoveConstructible) 的要求。
  • T2 必须满足可交换 (Swappable) 的要求。

swap还提供了复杂类型的特化版本,比如支持vector,array等类型:
image.png