函數模板(泛型編程)

函數模板,實際上是建立一個通用函數,其函數類型和形參類型不具體指定,用一個虛擬的類型來代表。這個通用函數就稱爲函數模板。

本質:類型參數化

爲什麼要用函數模板:當存在功能相同,不需要重複修改業務邏輯時,

函數模板的調用

MySwap<int>(a,b)    //顯示類型調用

MySwap(a,b)            //自動數據類型推到(根據實參對參數類型進行推導)

#include <iostream>
using namespace std;

//相同參數類型
template <typename T>
///交換位置
void MySwap(T &a,T &b)
{
	T c = NULL;
	c = a;
	a = b;
	b = c;
}

//不同參數類型
template <typename T,typename T1>
///排序
void MySort(T *array,T1 size)
{
	T1 i, j;
	T temp = 0;
	for (i = 0; i < size;i++)
	{
		for (j = i+1; j<size;j++)
		{
			if (array[i] < array[j])
			{
				temp = array[i];
				array[i] = array[j];
				array[j] = temp;
			}
		}
	}
}

//不同參數類型
template <typename T,typename T1>
void MyPrint(T *array,T1 size)
{
	for (int i = 0; i < size; i++)
	{
		cout << array[i] << " ";
	}
}

int main()
{
	int a = 10;
	int b = 20;

	MySwap<int>(a, b);// 顯示類型調用
	MySwap(a, b);//自動類型數據推導
	printf("a:%d,b:%d \n", a, b);

	char c = 'c';
	char d = 'd';

	MySwap<char>(c, d);//顯示類型調用
	MySwap(c, d);//自動類型數據推導
	printf("c:%c,d:%c \n", c, d);

	int array[] = { 5,34,23,76,23,4,5,0,9,12,2,33 };
	int size = sizeof(array) / sizeof(*array);
	MySort<int,int>(array, size);// 顯示類型調用
	MyPrint(array, size);//自動類型數據推導

	cout << endl;

	char cArray[] = "ashjku3256yiuuh";
	int len = strlen(cArray);

	MySort(cArray, len);
	MyPrint(cArray, len);

	system("pause");
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章