函数模板求数组数中的最大值
时间: 2023-09-12 22:06:32 浏览: 110
可以使用以下的函数模板来求取数组中的最大值:
```cpp
template<typename T, size_t N>
T max_array(T (&arr)[N]) {
T max_val = arr[0];
for(size_t i=1; i<N; ++i) {
if(arr[i] > max_val) {
max_val = arr[i];
}
}
return max_val;
}
```
其中,函数模板接受一个类型为T、大小为N的数组的引用,并返回数组中的最大值。函数模板中使用了模板的两个参数,T 表示数组中元素的类型,N 表示数组的大小。在函数内部,使用一个 for 循环来遍历数组中的元素,不断更新最大值,最终返回最大值。
使用示例:
```cpp
int arr[] = {1, 2, 3, 4, 5};
int max_val = max_array(arr);
std::cout << max_val << std::endl; // 输出 5
```
需要注意的是,函数模板的参数推导规则可以让我们在调用函数时省略模板参数,编译器会自动推导出模板参数的类型和大小。因此,我们可以直接传递一个数组给函数模板,而不用显式指定模板参数。
相关问题
运用函数模板求数组4数中的最大值
可以使用函数模板来实现这个功能:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
template<typename T>
T array_max(T arr[], int size) {
return *max_element(arr, arr + size);
}
int main() {
int arr1[] = {1, 2, 3, 4};
double arr2[] = {1.1, 2.2, 3.3, 4.4};
cout << "max of arr1 is " << array_max(arr1, 4) << endl;
cout << "max of arr2 is " << array_max(arr2, 4) << endl;
return 0;
}
```
在上面的代码中,我们定义了一个函数模板 `array_max`,它接受一个数组和数组大小作为参数,返回数组中的最大值。在 `main` 函数中,我们分别定义了两个数组 `arr1` 和 `arr2`,并分别调用了 `array_max` 函数来求解它们的最大值。由于 `array_max` 是一个函数模板,因此我们不需要指定其参数类型,编译器会根据传入的参数自动推导出所需的类型。
编写一个函数模板,求数组中的所有元素的最大值,并写出调用此函数模板的完整程序,使得函数调用时,数组的类型可以是整型和单精度型。
好的,我来为您编写这个函数模板和完整程序。代码如下:
```cpp
#include <iostream>
#include <algorithm>
template <typename T>
T getMax(T arr[], int size)
{
T maxVal = arr[0];
for(int i = 1; i < size; i++)
{
if(arr[i] > maxVal)
{
maxVal = arr[i];
}
}
return maxVal;
}
int main()
{
int arr1[] = {1, 5, 3, 7, 2};
float arr2[] = {1.1f, 5.5f, 3.3f, 7.7f, 2.2f};
int size1 = sizeof(arr1) / sizeof(int);
float size2 = sizeof(arr2) / sizeof(float);
std::cout << "Max value in arr1: " << getMax(arr1, size1) << std::endl;
std::cout << "Max value in arr2: " << getMax(arr2, size2) << std::endl;
return 0;
}
```
这个程序定义了一个函数模板 `getMax`,它可以接受一个任意类型的数组和数组大小作为参数,并返回数组中的最大值。在 `main` 函数中,我们定义了两个数组 `arr1` 和 `arr2`,其中一个是整型数组,另一个是单精度浮点型数组,然后我们通过调用 `getMax` 函数模板来获取数组中的最大值。由于我们已经定义了数组的类型和大小,所以编译器会自动推断出函数模板的模板参数类型,从而实例化出对应类型的函数。最后,程序输出了两个数组的最大值。