C++Primer Plus 编程练习8.8,练习5,函数模板实现的方法

5.编写模板函数 max5(),它将一个包含5个T类型元素的数组作为参数,并返回数组中最大的元素
(由于长度固定,因此可以在循环中使用硬编码,而不必通过参数来传递)。在一个程序中使用该函数,将
T替换为一个包含5个int值的数组和一个包含5个dowble 值的数组,以测试该函数。

分析:这里有一个问题函数带返回值,但是我们知道用模板编程是不确定数据类型的,所以返回值得返回就有讲究了。
这里面我们不知道传入得是具体的什么数据类型得数据,故记录数组的位置,直接用过位号弹出去。从而避开了返回数据类型的判断

#pragma region 练习1.cpp
/*
*/
#if 1
#include <iostream>
#include <array>
using namespace std;

template<typename T>
const T& max5(const array<T, 5>& arr)
{
	//应为这里不知道数据类型是具体的
	//所以只把她的编号记录下来,直接返回出去
	unsigned arrMaxId = 0;
	for (unsigned i = 0; i < 5; i++){
		if (arr[i] > arr[arrMaxId]){
			arrMaxId = i;
		}
	}
	return (arr[arrMaxId]);
}
int main(){
	array<int, 5> intArr = {21,5,66,90,5};
	for (const auto& e: intArr){
		cout << e << " ";
	}
	cout << "-------Max: " << max5(intArr) << endl;
	array<double, 5> doubleArr = {3.3,5.2,6.1,2.0,-2.1};
	for (const auto&e:doubleArr){
		cout << e << " ";
	}
	cout << " ----max:" << max5(doubleArr);
	cout << endl;
	return 0;
}
#endif
#pragma endregion

此例子参考标准答案。即在max5做范围类型处理的时候,用到了此方法。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值