c++day17 函数模板概念引入

本文探讨了函数模板在C++编程中的应用,通过实例解释了如何使用模板实现不同类型的数据交换和排序,展示了模板编程的强大功能和代码复用优势。

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

  • 为什么要有函数模板呢?
    • 请看下面的引子
#include <iostream>
using namespace std;

//函数的业务逻辑其实一样,但是函数的参数类型不一样
//发明一种类型,让类型参数化,方便程序员编码
//这就是泛型编程

//template告诉编译器开始了泛型编程,不会对T进行报错
template <typename T>
void mySwap(T &a,T &b)
{
	T c;
	c= a;
	a= b;
	b= c;
}
//函数模板的调用
//显示类型调用,自动类型推导
void main()
{
	{
		int x =50;
		int y =100;
		mySwap<int>(x,y);//函数模板 显示类型调用方式一

		cout<<"x:"<<x<<"y:"<<y<<endl;
	}
	{
		char a =50;
		char b =100;
		mySwap<char>(a,b);//函数模板 显示类型调用方式一

		cout<<"a:"<<a<<"b:"<<b<<endl;
	}
	{
		int x1 =5;
		int y1 =10;
		mySwap(x1,y1);//函数模板 自动类型推导 类型调用方式一
		//但是建议最好建议是显式模板调用

		cout<<"x1:"<<x1<<"y1:"<<y1<<endl;

	}
	cout<<"hello"<<endl;
	system("pause");
	return ;
}

void myswap01(int &a,int &b){
	int c = 0;
	c =a;
	a= b;
	b= c;
}
void myswap02(char &a,char &b){
	char c = NULL;
	c =a;
	a= b;
	b= c;
}

void main01(){
	{
	int x=10,y=20;
	myswap01(x,y);
	cout<<"x:"<<x<<"y:"<<y<<endl;
	}

	{
	char a ='y';
	char b ='h';
	myswap02(a,b);
	cout<<"x:"<<a<<"y:"<<b<<endl;
	}

	cout<<"hello"<<endl;
	system("pause");
	return ;
}

  • 函数模板可以提供更方便的代码复用
  • 此文章仅引出模板的概念
  • #include <iostream>
    using namespace std;
    //需求,对字符数组 int类型数组进行排序
    
    template <typename T>
    int mySort(T *array,int size){
    	T tmp;
    	if(array == NULL)
    	{
    		return -1;
    	}
    	for(int i =0;i<size;i++)
    	{
    		for(int j =i+1;j<size;j++)
    		{
    			if(array[i] < array[j])
    			{
    				tmp  = array[i];
    				array[i] = array[j];
    				array[j] = tmp;
    			}
    		}
    	}
    	return 0;
    }
    int printS(int *array,int size){
    	for(int i =0;i<size;i++)
    	{
    		cout<<array[i]<<endl;
    	}
    	return 0;
    }
    void main(){
    	int array[] = {11,22,33,44,55,2,3,4,5,9};
    	int size = sizeof(array)/sizeof(array[0]);
    	mySort<int>(array,size);
    	//注意,你模板用了几个T,就在尖括号写几个,不用全部都写出来
    
    	printf("排序之后\n");
    	printS(array,size);
    
    	cout<<"hello"<<endl;
    	system("pause");
    	return ;
    }

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值