C++函数模板

本文深入探讨了C++中的泛型编程思想,重点介绍了模板机制,包括函数模板和类模板的使用方法。通过实例展示了如何使用模板进行数据交换和数组排序,并讨论了普通函数与函数模板的调用规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++的另一种编程思想就是泛型编程,主要利用的技术就是模板。C++提供两种模板机制:函数模板和类模板

一、函数模板

1、建立一个通用函数,其返回值类型和形参类型不具体指定,用一个虚拟的类型来代表。语法如下:

template<typename T>
函数声明或定义
// template :声明创建模板
// typename:表明其后面的符号是一种数据类型,可以用class代替
// T:通用的数据类型

2、应用实例:交换两个数据,数据可以为不同的类型

#include<iostream>
using namespace std;

// 用于两个数据交换的函数模板(整型、浮点型等)
template<typename T> 
void swapData(T &a,T &b) 
{
	T temp = a;
	a = b;
	b = temp;
}


int main() 
{
	int a = 10, b = 20;
	swapData(a, b); //自动推导交换的数据类型
	swapData<int>(a, b); // 显式的指定要交换的数据类型

	cin.get();
}

3、注意事项:

  • 自动推导数据类型,必须要推出数据类型一致的T
  • 模板必须要确定出 T 的数据类型才可以使用。

二、函数模板案例——对不同数据类型的数组进行排序

1、排序规则是从大到小,排序算法为选择排序;分别用char类型和int类型进行测试。

#include<iostream>
using namespace std;

template<class T>
void swapData(T &a, T &b) {
	T temp = a;
	a = b;
	b = temp;
}

// 排序算法:选择排序
template<class T> 
void mySort(T arr[], int len) 
{
	for (int i = 0; i < len; i++) {	
		int max = i;
		for (int j = i + 1; j < len; j++) {			
			if (arr[max] < arr[j]) {
				swapData(max, j);
			}
		}
		if (max != i) {
			swapData(arr[max], arr[i]); // 交换max和i的元素
		}
	}
}


int main() 
{
	int test01[] = { 3,1,6,8,2,90 };
	int len = sizeof(test01) / sizeof(test01[0]);
	mySort(test01, len);
	
	for (int i = 0; i < len; i++) {
		cout << test01[i] << " ";
	}
	cin.get();
}

三、普通函数与函数模板的调用规则

1、如果普通函数和函数模板都可以实现,则优先调用普通函数。

2、如果函数模板可以更好的匹配,则优先调用函数模板。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值