Plantilla de función C ++ (1) Sintaxis básica de la plantilla de función, precauciones para la plantilla de función y lista de casos de la plantilla de función: clasificación de matrices

Plantilla de función C ++ (1)

Ayer, finalmente terminé de aprender el capítulo de plantilla de función y resolví un caso muy bueno de plantilla de función. Hoy, comencé a ordenar las notas que tomé esta semana. Recuerdo mucho, así que lo resolveré hoy La sintaxis básica de la plantilla de función, las precauciones de la plantilla de función y la clasificación de matriz de caso de la plantilla de función, estas tres partes.

01. El concepto de plantilla-plantilla es
solo un marco con una gran versatilidad, pero no se puede utilizar directamente.
Rol: para establecer una función general, el tipo de valor de retorno de la función y el tipo de parámetro formal, no se puede especificar específicamente, representado por un tipo virtual.
Finalidad: Mejorar la reutilización y parametrizar tipos.
02, la sintaxis básica de las plantillas de funciones

template<typename T>

plantilla: declara crear una plantilla.
typename: indica que el símbolo detrás de él es un tipo de datos, que puede ser reemplazado por class.
T: tipo de datos general, el nombre se puede reemplazar, generalmente en letras mayúsculas.
Caso de prueba específico:

#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. Precauciones para la plantilla de función
① Derivación automática de tipos, el tipo de datos coherente T debe derivarse antes de que pueda utilizarse.
②La plantilla debe determinar el tipo de datos T antes de que pueda usarse.
Implementación de prueba de función específica:

#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. Plantilla de función clasificación de case-Array
Realice la función general de ordenar arreglos:
regla → de
algoritmo pequeño a grande → seleccione
prueba → matriz de caracteres, implementación de código específico de matriz 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;
}

end-problemas menores
que aparecen 1. Preste atención al número de dígitos dobles
2. La función se declara de antemano int main es la llamada para escribir el código
3. Cout salida, hay un identificador indefinido o el problema de estructura de la función
4. Pruebe la escritura de la matriz de caracteres: char charArr [] = ""
5. Cálculo de la longitud de la matriz: int num = sizeof (charArr) / sizeof (charr)

Bien, solucionemos muchas cosas primero.

Supongo que te gusta

Origin blog.csdn.net/qq_45252077/article/details/107876431
Recomendado
Clasificación