更好的max和min
  • 板块灌水区
  • 楼主YCSluogu
  • 当前回复9
  • 已保存回复9
  • 发布时间2021/8/19 15:35
  • 上次更新2023/11/4 10:03:23
查看原帖
更好的max和min
311721
YCSluogu楼主2021/8/19 15:35

参数列表不定的max和min

template <class T>
const T& Max(const T& a, const T& b) {
    return a < b ? b : a;
}

template <class T, class... Args>
const T& Max(const T& a, Args... args) {
    const T& temp = Max(args...);
    return a < temp ? temp : a;
}

template <class T>
const T& Min(const T& a, const T& b) {
    return a < b ? a : b;
}

template <class T, class... Args>
const T& Min(const T& a, Args... args) {
    const T& temp = Min(args...);
    return a < temp ? a : temp;
}

如果要判断两个参数,要保证有 <运算符

STL的max和min由于需要用第三个参数来带入比较器,所以无法用可变参数列表。在可变参数列表中,因为我们无法判断任何一个参数是否会参与比较,也无法通过位置判断任何一个参数是否是比较器。

当然如果设计两个名字不同的函数来表示是否带比较器,也是勉强可行。但是这样就会失去用重载和泛型的意义

int a, b, c;
cin >> a >> b >> c;
cout << Max(a, b, c);
cout << Min(1, 2, 123, 125, 123, 12);

用法很暴力。

2021/8/19 15:35
加载中...