【C++之函数模板】数据排序

【C++之重载函数】数据排序
上一篇我们用重载函数实现了对n个数据从小到大的排序。
这次我们要用到函数模板。

题目要求

对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型,用函数模板

——谭浩强的《C++面向对象程序设计》第1章习题第14小题

函数模板

重载函数可以实现一个函数名多用,但在程序中仍要分别定义每一个函数,较为繁琐,而函数模板可以解决这个问题。

  1. 函数模板就是建立一个通用函数,不具体指定函数类型和形参类型,只用一个虚拟类型来代表。
  2. 凡是函数体相同的函数都可以用这个模板来代替,不用重复定义多个函数,只需要用模板定义一次
  3. 通用函数模板的定义格式:
template <typename T>

或者

template <class T>
  1. 函数模板虽然比函数重载方便,但也有局限性。函数模板只适用于函数的参数个数相同而类型不同,且函数体相同的情况。

程序

/*
************************************************************************
@file:    main.cpp
@date:   20201024
@brief:   对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型,用函数模板实现
@blog:    https://blog.csdn.net/weixin_43470383/article/details/109268212
************************************************************************
*/

#include <iostream>
using namespace std;
#define n 3

template  <typename T>
void sort(T a[])
{
	int i, j, k;
	T min;
	for (i = 0; i < n - 1; i++)
	{
		k = i;
		for (j = i + 1; j < n; j++)
		{
			if (a[j] < a[k])
				k = j;
		}

		if (k != i)
		{
			min = a[k];
			a[k] = a[i];
			a[i] = min;
		}
	}
}


int  main()
{
	// 1.整型、单精度型、双精度型数组定义
	int num1[n];
	float num2[n];
	double num3[n];

	// 2.输入数组元素
	for (int i = 0; i < n; i++)
	{
		cin >> num1[i];
	}
	for (int i = 0; i < n; i++)
	{
		cin >> num2[i];
	}
	for (int i = 0; i < n; i++)
	{
		cin >> num3[i];
	}

	// 3.调用排序函数,用选择法对数据进行排序
	sort(num1);
	sort(num2);
	sort(num3);

	// 4.输出数组元素
	for (int i = 0; i < n; i++)
	{
		cout << num1[i] << " ";
	}
	cout << endl;
	for (int i = 0; i < n; i++)
	{
		cout << num2[i] << " ";
	}
	cout << endl;
	for (int i = 0; i < n; i++)
	{
		cout << num3[i] << " ";
	}
	cout << endl;

	system("PAUSE");
	return   0;
}

运行结果

运行结果
输入:
3 2 1
12.3 23.1 32.1
46.54 65.46 34.56

输出:
1 2 3
12.3 23.1 32.1
34.56 46.54 65.46

程序实现了数据从小到大排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不雨_亦潇潇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值