0
点赞
收藏
分享

微信扫一扫

c++day15 模板

三分梦_0bc3 2022-04-03 阅读 69
c++

分为函数模板与类模板

1、函数模板

作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表

语法:

解释:

template 声明创建模板

typename 表明其后面的符号是一种数据类型,可以用class代替

T 通用的数据类型,名称可以替换,通常用大写字母

//整形交换函数
void trans(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}

//浮点型交换
void swith(double &a, double &b)
{
	double temp = a;
	a = b;
	b = temp;
}

//函数模板
template<typename T>  //声明一个模板,让T不要报错
void myswap(T &a, T &b)
{
	T temp = a;
	a = b;
	b = temp;
}

void test1()
{
	double a = 10; double b =254.5;
	//利用模板
	//1.自动类型推导
	//myswap(a, b);

	//2.显示制定类型
	myswap<double>(a, b);
	cout << a << endl;
}

int main()
{
	test1();
	system("pause");
	return 0;
}

2.函数模板注意事项

emplate<typename T>    typename可换成class

template<class T>  //声明一个模板,让T不要报错
void func()
{
	cout << "模板" << endl;
}

void test1()
{
	double a = 10; double b =254.5;
	//利用模板
	//1.自动类型推导
	//myswap(a, b);

	//2.显示制定类型
	myswap<double>(a, b);
	cout << a << endl;

	func<int>(); //因为没用到T,所以随便制定一个类型,使模板可以使用
}

3.案例

  • 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序
  • 排序规则从大到小,选择排序
  • 分别利用char和int数组进行排序

自己写的一个冒泡排序

template<class T>  //声明一个模板,让T不要报错
void mysort(T *arr,T len)  //数组冒泡排序模板,只用穿数组首地址就行,不要穿两个地址
{
	for (int i = 0; i < len; i++)
	{
		for (int j = 0; j < len - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j + 1];
				arr[j + 1] = arr[j];
				arr[j] = temp;
			}
		}
	}
}

void test1()
{
	int arr[10] = { 10,54,88,675,4,0,3030,92,654,300 };
	for (int i = 0; i < 10; i++)
	{
		int *p1 = arr; int len = sizeof(arr) / sizeof(arr[0]);
		mysort<int>(p1,len);
	}
	
	for (int i = 0; i < 10; i++)
	{
		cout << arr[i] << "\n" << endl;
	}
}

老师写的

//函数模板
template<class T>  //声明一个模板,让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])
			{
				max = j;
			}
		}
		if (max != i)
		{
			//交换max和j元素
			int temp;
			temp = arr[max];
			arr[max] = arr[i];
			arr[i] = temp;
		}
	}
}

void test1()
{
	char chararr[] = "abdudks";int arr[10] = { 10,54,88,675,4,0,3030,92,654,300 };
	int len = sizeof(chararr) / sizeof(chararr[0]);
	int num = sizeof(arr) / sizeof(arr[0]);
	mysort<char>(chararr, len);
	
	/*for (int i = 0; i < 10; i++)
	{
		cout << chararr[i] << "  " << endl;
	}*/
	mysort<int>(arr, num);
	for (int i = 0; i < 10; i++)   //模板
	{
		cout << arr[i] << "  " << endl;
	}
}

int main()
{
	test1();
	system("pause");
	return 0;
}

4.普通函数与模板的区别(视频171,172暂时没做笔记,之后补上

自动类型推导不会发生隐式类型转换

显示制定类型有隐式类型转换

举报

相关推荐

Day 15

DAY15

c语言学习日记day-15

day15

Python-day15

javaweb day15

day15_Flink05

0 条评论