参数列表不定的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);
用法很暴力。