实验十五 函数模板

A. 找到最大数(函数模板)

利用函数模板求不同类型的5个数最大值(分别考虑整数、单精度、长整数的情况)

输入

分别输入5个int型整数、5个float 型实数、5个long型正整数。

输出

分别输出5个int型整数的最大值、5个float 型实数的最大值、5个long型正整数的最大值。

输入样例1 

11 22 666 44 55
11.11 22.22 33.33 888.88 55.55
1234567 222222 333333 444444 555555
输出样例1

666
888.88
1234567

#include <iostream>
using namespace std;
template<typename T> 
T max(T a[], int t)  //注意 返回值为T
{
	T num = 0;
	for (int i = 0; i < t; i++)
	{
		if (num < a[i])
		{
			num = a[i];
		}
	}
	return num;
}
int main()
{
	int i[5];
	float f[5];
	long l[5];
	for (int j = 0; j < 5; j++)
	{
		cin >> i[j];
	}
	for (int j = 0; j < 5; j++)
	{
		cin >> f[j];
	}
	for (int j = 0; j < 5; j++)
	{
		cin >> l[j];
	}
	cout << max<int>(i,5) << endl;// 先<显式指定类型>   然后再(函数参数)  
	cout << max<float>(f,5) << endl;
	cout << max<long>(l,5) << endl;
}

B. 元素查找(函数模板)

编写一个在数组中进行查找的函数模板,其中数组为具有n个元素,类型为T,要查找的元素为key。

注意:必须使用模板函数

输入

第一行输入t表示有t个测试实例

第二行先输入一个大写字母表示数组类型,I表示整数类型,D表示双精度数类型,C表示字符型,S表示字符串型;然后输入n表示数组长度。

第三行输入n个数据

第四行输入key

依次输入t个实例

输出

每行输出一个结果,找到输出key是数组中的第几个元素(从1开始),找不到输出0

输入样例1 

4
I 5
5 3 51 27 9
27
D 3
-11.3 25.42 13.2
2.7
C 6
a b g e u q
a
S 4
sandy david eason cindy
cindy
输出样例1

4
0
1
4

#include <iostream>
#include<cstring>
using namespace std;
template<typename T>
int tar(T a[], int n) //返回int 因为target是个整数
{
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    T key;     
    cin >> key;
    int target = 0;
    for (int i = 0; i < n; i++)
    {
        if (a[i] == key)
        {
            target = i + 1;
        }
    }
    return target;

}
int main()
{
    int t, n;
    cin >> t;
    char type;
    while (t--)
    {
        cin >> type >> n;
        switch (type)
        {
        case'I':
        {
            int* p = new int[n];
            cout << tar(p, n) << endl;

            break;
        }
        case'D':
        {
            double* p = new double[n];
            cout << tar(p, n) << endl;

            break;
        }
        case'C':
        {
            char* p = new char[n];
            cout << tar(p, n) << endl;

            break;
        }
        case'S':
        {
            string* p = new string[n];
            cout << tar(p, n) << endl;
            break;
        }
        }
    }
    return 0;
}

C. 谁的票数最高(函数模板)

某小镇要票选镇长,得票最高者当选。但由于投票机制不健全,导致每届投票时,候选人在投票系统的识别码类型不一致。请编写函数模板,能针对多种类型的数据,查找出得票最高的元素。其中,每届投票的选票有n张,识别码类型为T

注意:必须使用模板函数

第一行输入t表示有t个测试实例

第二行先输入一个大写字母表示识别码类型,I表示整数类型,C表示字符型,S表示字符串型;然后输入n表示数组长度。

第三行输入n个数据

依次输入t个实例

输出

每行输出一个结果,分别输出当选者的识别码和得票数,以空格分开。

输入样例1

3
I 10
5 3 5 2 9 7 3 7 2 3
C 8
a b a e b e e q
S 5
sandy david eason cindy cindy
输出样例1

3 3
e 3
cindy 2

#include <iostream>
#include<cstring>
using namespace std;
template <class T>
void check(int n)
{
	T *a = new T[n];
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];        //输入n个数据
	}
	int max = 0; //当选者得票数
	index = 0;//当选者识别码
	for (int i = 0; i < n; i++)
	{
		int count = 0;
		for (int j = 0; j < n; j++)
		{
			if (a[i] == a[j])//如果有一样的就+票
			{
				count++;
			}
		}
		if (count > max)
		{
			max = count;
			index = i;
		}
	}
	cout << a[index] << ' ' << max << endl;
}

int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		char x;
		cin >> x;
		int num;
		cin >> num;
		if (x == 'I') check<int>(num);
		if (x == 'C') check<char>(num);
		if (x == 'S') check<string>(num);
	return 0;
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值