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)
좋아, 먼저 정리 해보자.