用函数模版实现求任意2个或3个整数的最大数C++
时间: 2023-06-11 17:09:21 浏览: 51
可以使用函数模板 `max()` 来实现求任意2个或3个整数的最大值:
```c++
#include <iostream>
using namespace std;
// 比较两个数的大小
template<typename T>
T max(T a, T b) {
return a > b ? a : b;
}
// 比较三个数的大小
template<typename T>
T max(T a, T b, T c) {
return max(max(a, b), c);
}
int main() {
cout << "max(1, 2) = " << max(1, 2) << endl; // 输出 2
cout << "max(1, 2, 3) = " << max(1, 2, 3) << endl; // 输出 3
return 0;
}
```
在这个例子中,使用了两个函数模板 `max()`,一个用于比较两个数的大小,另一个用于比较三个数的大小。通过在函数名后面加上 `<typename T>`,指定了这是一个函数模板,T 是一个模板类型参数,可以是任意类型。在函数体内,使用 `return a > b ? a : b;` 来比较两个数的大小,并返回最大值。在比较三个数的大小时,使用了两次 `max()` 函数来嵌套比较,得到三个数中的最大值。
相关问题
编写一个程序,用来求2个或3个整数中的最大输,,用函数模板实现
```C++
#include <iostream>
using namespace std;
template<typename T>
T max(T a, T b) {
return a > b ? a : b;
}
template<typename T>
T max(T a, T b, T c) {
return max(max(a, b), c);
}
int main() {
int a = 10, b = 20, c = 15;
cout << "max of two integers: " << max(a, b) << endl;
cout << "max of three integers: " << max(a, b, c) << endl;
double d = 3.14, e = 2.718, f = 2.0;
cout << "max of two doubles: " << max(d, e) << endl;
cout << "max of three doubles: " << max(d, e, f) << endl;
return 0;
}
```
编写重载函数可求取2个整数,3个整数的最大值
下面给出两种方案:
方案一:使用函数重载实现
```c++
#include <iostream>
using namespace std;
int max(int a, int b) {
return (a > b) ? a : b;
}
int max(int a, int b, int c) {
int max1 = max(a, b);
int max2 = max(max1, c);
return max2;
}
int main() {
int a = 1, b = 2, c = 3;
cout << "max(a,b) = " << max(a, b) << endl;
cout << "max(a,b,c) = " << max(a, b, c) << endl;
return 0;
}
```
方案二:使用可变参数模板实现
```c++
#include <iostream>
#include <cstdarg>
using namespace std;
int max(int count, ...) {
int res = INT_MIN;
va_list vl;
va_start(vl, count);
for (int i = 0; i < count; ++i) {
int val = va_arg(vl, int);
res = (val > res) ? val : res;
}
va_end(vl);
return res;
}
int main() {
int a = 1, b = 2, c = 3;
cout << "max(a,b) = " << max(2, a, b) << endl;
cout << "max(a,b,c) = " << max(3, a, b, c) << endl;
return 0;
}
```
这两种方案都可以用来求取2个整数和3个整数的最大值,使用哪种方案取决于具体的需求情况。