c++ 基础知识-模板1

c++ 基础知识-模板1

1.c++ 基础知识-模板-函数模板

总结
函数模板利用关键字template
使用函数模板有两种方式;自动类型推导,显示指定类型
模板的目的是为了提高复用性,将类型参数化

#include <iostream>
using namespace std;

//利用模板提供通用的交换函数
template <typename T>//typname可以用class替换
void mySwap(T& a,T& b)
{
	T temp = a;
	a = b;
	b = temp;
}
void test_fun()
{
	int a = 22;
	int b = 33;
	cout<<"a = "<<a<<endl;
	cout<<"b = "<<b<<endl;
	//1.自动类型转换
	mySwap(a,b);
	cout<<"mySwap(a,b)"<<endl;
	cout<<"a = "<<a<<endl;
	cout<<"b = "<<b<<endl;
	//2.显示指定类型
	mySwap<int>(a,b);
	cout<<"mySwap<int>(a,b)"<<endl;
	cout<<"a = "<<a<<endl;
	cout<<"b = "<<b<<endl;
	//输出
	//a = 22
	//b = 33
	//mySwap(a,b)
	//a = 33
	//b = 22
	//mySwap<int>(a,b)
	//a = 22
	//b = 33
}
int main()
{
	test_fun();
	return 0;
}  

2.c++ 基础知识-模板-函数模板实例

#include <iostream>
using namespace std;

//利用模板提供通用的交换函数
template <typename T>//typname可以用class替换
void mySwap(T& a,T& b)
{
	T temp = a;
	a = b;
	b = temp;
}

template <typename T>//typname可以用class替换
void swapSort(T *arr,int length)
{
	//int length = sizeof(arr)/sizeof(arr[0]);
	for (int i = 0; i < length; i++)
	{
		T max = i;
		for (int j = i+1;j<length;j++)
		{
			if (arr[max] < arr[j])
			{
				max =j;
			} 
		}
		if (max != i)
		{
			//交换max和i
			mySwap(arr[max],arr[i]);
		}
	}
}

template <typename T>//typname可以用class替换
void outPut(T *arr,int length)
{
	//int length = sizeof(arr)/sizeof(arr[0]);
	for (int i = 0; i < length; i++)
	{
		cout<<arr[i]<<endl;
	}
}

void test_fun()
{
	//int a = 1;
	//string b = "jkjkjk";
	//mySwap(a,b);//error C2782: “void mySwap(T &,T &)”: 模板 参数“T”不明确
	int int_arr[] = {1,3,2,4,7,6,9,5,8,0};
	int length = sizeof(int_arr)/sizeof(int_arr[0]);
	swapSort(int_arr,length);
	outPut(int_arr,length);

	//char char_arr[] = {'s','a','e',};
	//int length = sizeof(char_arr)/sizeof(char_arr[0]);
	//swapSort(char_arr,length);
	//outPut(char_arr,length);
}

int main()
{
	test_fun();
	return 0;
}  

3.c++ 基础知识-模板-普通函数与模板函数异同

普通函数与模板函数区别
普通函数可以自动类型转换(隐式类型转换)
函数模板调用时,利用自动类型推导,不会发生隐式类型转换
利用显示指定类型,可以发生隐式类型转换

#include <iostream>
using namespace std;

//普通函数
int add_1(int a,int b)
{
	return a + b;
}

//模板函数
template<class T>
T add_2(T a,T b)
{
	return a + b;
}

void test_fun()
{
	int a = 9;
	//int b = 10;
	char c = 'd';

	//普通函数
	cout<< add_1(a,c)<<endl;

	//隐式调用转换
	//cout<< add_2(a,c)<<endl;//error C2782: “T add_2(T &,T &)”: 模板 参数“T”不明确

	//显式调用
	cout<< add_2<int>(a,c)<<endl;
}

int main()
{
	test_fun();
	return 0;
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值