C ++ 함수 템플릿 (1) 함수 템플릿 기본 구문, 함수 템플릿주의 사항, 함수 템플릿 케이스 목록 — 배열 정렬

C ++ 함수 템플릿 (1)

어제 드디어 함수 템플릿 챕터를 배우고 아주 좋은 함수 템플릿 사례를 정리했습니다. 오늘은 이번 주에 제가 메모 한 내용을 순서대로 정리하기 시작했습니다. 기억이 많이 나서 오늘 정리하겠습니다. . 함수 템플릿의 기본 구문, 함수 템플릿의주의 사항 및 함수 템플릿 케이스 배열 정렬,이 세 부분.

01. 템플릿-템플릿의 개념은
다재다능한 프레임 워크 일뿐 직접 사용할 수는 없습니다.
역할 : 일반 기능을 설정하기 위해 함수 반환 값 유형 및 형식 매개 변수 유형을 구체적으로 지정할 수 없으며 가상 유형으로 표현할 수 있습니다.
목적 : 재사용 성을 개선하고 유형을 매개 변수화합니다.
02, 함수 템플릿의 기본 구문

template<typename T>

템플릿-템플릿 생성을 선언합니다.
typename-그 뒤에있는 기호가 클래스로 대체 될 수있는 데이터 유형임을 나타냅니다.
T— 일반 데이터 유형. 이름은 일반적으로 대문자로 바꿀 수 있습니다.
특정 테스트 사례 :

#include<iostream>
using namespace std;

//函数模板
//交换两个整型函数
void swapInt(int &a,int &b)
{
    
    
	int temp =a;
	a=b;
	b=temp;
}

//交换两个浮点型函数
void swapDouble(double &a,double &b)
{
    
    
	double temp=a;
	a=b;
	b=temp;

}

//因为有太多数据类型,一个一个写太过麻烦,所以引出函数模板的应用
template<typename T>//函数模版,后面紧跟一个T,就是先声明,后面如果出现T了先不要报错
void myswap(T &a,T &b)//同样先声明一个函数,但不确定数据类型,用T来代表
{
    
    
	T temp=a;
	a=b;
	b=temp;
}

//写一个利用模板的输出函数
void test03()
{
    
    

	int a=10;
	int b=11;
	//两种输出方式
	//1、自动判断法
	//myswap(a,b);
	//2、提示法
	myswap<int>(a,b);
	cout<<"a="<<a<<endl;
	cout<<"b="<<b<<endl;
	
}

//写一个赋值输出函数
void test01()
{
    
    
	int a=11;
	int b=30;
	swapInt(a,b);
	cout<<"交换后a的值"<<a<<endl;
	cout<<"交换后b的值"<<b<<endl;
}


//再写一个浮点型输出函数
void test02()
{
    
    
	double d=3.1415926535;
	double t=3.3333333333;
	swapDouble(d,t);
	cout<<"交换后d的值"<<d<<endl;
	cout<<"交换后t的值"<<t<<endl;
}

int main()
{
    
    
	//test01();
	//test02();
	test03();


system("pause");
return 0;

}

03. 함수 템플릿 사용시주의 사항
① 자동 형 도출, 일관된 데이터 형 T를 도출해야 사용이 가능합니다.
② 템플릿은 사용하기 전에 T 데이터 유형을 결정해야합니다.
특정 기능 테스트 구현 :

#include<iostream>
using namespace std;
//先把上次写的交换的函数给写出来
template<typename T>//正常写函数但之前加上模板的固定格式,,并且注意T代表的是通用相当于可以代表任意的
void myswap(T&a,T&b)
{
    
    
T temp=a;
   a=b;
   b=temp;
}

//自动类型推导输出型,必须推导出一致的数据类型T才可使用
void test01()
{
    
    
	int a=10;
	int b=20;
	char c='c';
	myswap(a,b);
	//myswap(a,c);//错误,因为推导不出一致的数据类型T
	cout<<"a="<<a<<endl;
	cout<<"b="<<b<<endl;
}
//模板必须确定T数据类型,才可以使用
//验证
template<typename T>
void func()
{
    
    
cout<<"func 调用"<<endl;

}

//输出这个函数
void test02()
{
    
    
//func();没有用到T的数据类型,所以没办法调用该函数输出
	func<int>();//确定了T的数据类型(虽然T的类型可以随意定义,因为func函数是一个空的函数)
}

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

04. 함수 템플릿 케이스-배열 정렬 배열 정렬
의 일반적인 기능 구현 :
규칙 → 작은
알고리즘 에서 큰 알고리즘 →
테스트 선택 → 문자 배열, int 배열
특정 코드 구현 :

#include<iostream>
#include<string>
using namespace std;

//目的:实现通用的对数组进行排序的函数
//规则:从小到大
//算法:选择
//测试:char 数组、int数组
//函数交换模板
template<typename T>
void myswap(T a,T b)
{
    
    
int temp =a;
a=b;
b=temp;
}

//选择排序函数模板
template<typename T>
void mysort(T arr,int len )
{
    
    
for(int i=0; i<len;i++)
{
    
    
//假设i项为最小项
	int min=i;
	for(int j=i+1;j<len;j++)
	{
    
    
	//将第i项与第j项进行比较
		//
		if(arr[min]>arr[j])
	 	{
    
    
		//交换两个数组的下标
		myswap(arr[i],arr[j]);
		}
	}
}

}
//输出函数模板
template<typename T>
void myprint(T arr[],int len )//len一定是int型,如果也写成T则会造成不一致现象无法输出
{
    
    
	for(int i=0;i<len;i++)
	{
    
    
	cout<<arr[i]<<" ";
	}
	cout<<endl;
}

//测试函数
void test01()
{
    
    
	char charArr[]="acbed";
    int len=sizeof(charArr)/sizeof(char);
	mysort(charArr,len);
	myprint(charArr,len);
}

int main()
{
    
    
	test01();

system("pause");
return 0;
}

나타나는 끝 사소한 문제
1. 두 자릿수에주의하십시오.
2. 함수는 미리 선언되어 있습니다. int main은 코드를 작성하기위한 호출입니다.
3. Cout 출력, 정의되지 않은 식별자 또는 함수 구조 문제가
있습니다. 4. char 배열 쓰기 테스트 : char charArr [] = ""
5. 배열 길이 계산 : int num = sizeof (charArr) / sizeof (charr)

좋아, 먼저 정리 해보자.

추천

출처blog.csdn.net/qq_45252077/article/details/107876431