feat: 统一 cpp 文件编码格式为 utf-8

This commit is contained in:
tracyxiong1
2023-01-02 20:39:00 +08:00
parent ade7173887
commit 368eda305f
63 changed files with 327 additions and 327 deletions

View File

@@ -6,21 +6,21 @@ template <class T>
T Max(T a,T b) {
return (a>b)?a:b;
}
//<EFBFBD>ػ<EFBFBD>
//template <> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><<3C>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) {}
//特化
//template <> 返回类型 函数名<特化的数据类型>(参数表) {}
template<>char * Max<char *>(char *a,char *b) {
return (strcmp(a,b)>=0)?a:b;
}
int main(){
float c=5.1,d=3.2;
cout<<"2,3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ǣ<EFBFBD>"<<Max(3,2)<<endl;
cout<<"c,d<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ǣ<EFBFBD>"<<Max(c,d)<<endl;
cout<<"2,3的最大值是:"<<Max(3,2)<<endl;
cout<<"c,d的最大值是:"<<Max(c,d)<<endl;
cout<<Max("xbv","xyce")<<endl;
system("pause");
}
/*
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5>ã<EFBFBD>
<EFBFBD><EFBFBD> <20><>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><E2A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C++<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>ʵ<EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
① 当程序中同时存在模板和它的特化时,特化将被优先调用;
② 在同一个程序中除了函数模板和它的特化外还可以有同名的普通函数。其区别在于C++会对普通函数的调用实参进行隐式的类型转换,
但不会对模板函数及特化函数的参数进行任何形式的类型转换。
*/

View File

@@ -6,16 +6,16 @@ T Max(T a,T b) {
return (a>b)?a:b;
}
/*
C++<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>ֻ<EFBFBD>Ǽ򵥵ؽ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD>κ<EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
C++在实例化函数模板的过程中,只是简单地将模板参数替换成调用实参的类型,并以此生成模板函数,不会进行参数类型的任何转换。
*/
int main(){
double a=2,b=3.4;
float c=5.1,d=3.2;
//<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ǿ<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>
cout<<"2, 3.2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ǣ<EFBFBD>"<<Max(double(2),3.2)<<endl;
cout<<"a, c <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ǣ<EFBFBD>"<<Max(float(a),c)<<endl;
//<EFBFBD><EFBFBD>ʾָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cout<<"'a', 3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ǣ<EFBFBD>"<<Max<int>('a',3)<<endl;
//在模板调用时进行参数类型的强制转换
cout<<"2, 3.2 的最大值是:"<<Max(double(2),3.2)<<endl;
cout<<"a, c 的最大值是:"<<Max(float(a),c)<<endl;
//显示指定函数模板实例化的参数类型
cout<<"'a', 3 的最大值是:"<<Max<int>('a',3)<<endl;
system("pause");
}

View File

@@ -1,18 +1,18 @@
//Eg9-1.cpp
#include <iostream>
//ע<EFBFBD><EFBFBD>һ<EFBFBD>max<EFBFBD><EFBFBD>minʹ<EFBFBD>õ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ı<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>std::cout<EFBFBD><EFBFBD>std::endl
//注意一点,maxmin使用的时候,容易引起冲突,如果写了下面这一行代码,则要改变函数模板名字,否则直接使用std::coutstd::endl
using namespace std;
/*
<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>class<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD>class<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD>ͬ<EFBFBD>ġ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>class<EFBFBD><EFBFBD>ʾT<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD>int<EFBFBD><EFBFBD>float<EFBFBD><EFBFBD>char<EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>struct<EFBFBD><EFBFBD>enum<EFBFBD><EFBFBD>class<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD>
不要把这里的class与类的声明关键字class混淆在一起虽然它们由相同的字母组成但含义是不同的。
这里的class表示T是一个类型参数可以是任何数据类型intfloatchar等,或者用户定义的structenumclass等自定义数据类型。
*/
template <class T>
T Min(T a,T b) {
return (a<b)?a:b;
}
/*
Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹ؼ<EFBFBD><EFBFBD><EFBFBD>class<EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼C++<2B><><EFBFBD><EFBFBD>?<3F><><EFBFBD><EFBFBD>typename<6D><65>Ϊģ<CEAA><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹ؼ<CDB9><D8BC>֣<EFBFBD>ͬʱҲ֧<D2B2><D6A7>ʹ<EFBFBD><CAB9>class<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>min<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>template <class T>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ȼ۵ģ<EFBFBD>
为了区别类与模板参数中的类型关键字class标准C++提出?了用typename作为模板参数的类型关键字同时也支持使用class
比如把min定义的template <class T>写成下面的形式是完全等价的:
*/
template <typename T>
T myMin(T a, T b){
@@ -20,22 +20,22 @@ T myMin(T a, T b){
}
/*
ģ<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жԺ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>εľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>ȷ<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>η<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ֻ<EFBFBD>ڵ<EFBFBD>1<EFBFBD>ν<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>ڵ<EFBFBD>1<EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD>͵IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>1<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
模板实例化发生在调用模板函数时。当编译器遇到程序中对函数模板的调用时,
它才会根据调用语句中实参的具体类型,确定模板参数的数据类型,
并用此类型替换函数模板中的模板参数,生成能够处理该类型的函数代码,即模板函数。
当多次发生类型相同的参数调用时只在第1次进行实例化。编译器只在第1次调用时生成模板函数
当之后遇到相同类型的参数调用时不再生成其他模板函数它将调用第1次实例化生成的模板函数。
*/
int main(){
double a=2,b=3.4;
float c=2.3,d=3.2;
cout<<"2<EFBFBD><EFBFBD>3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ<EFBFBD>ǣ<EFBFBD>"<<Min<int>(2,3)<<endl; //<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cout<<"2<EFBFBD><EFBFBD>3.4 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ<EFBFBD>ǣ<EFBFBD>"<<Min(a,b)<<endl;//<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cout<<"'a'<EFBFBD><EFBFBD>'b' <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ<EFBFBD>ǣ<EFBFBD>"<<Min('a','b')<<endl;
cout<<"2.3<EFBFBD><EFBFBD>3.2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ<EFBFBD>ǣ<EFBFBD>"<<Min(c,d)<<endl;
cout<<"2.3<EFBFBD><EFBFBD>3.2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ǣ<EFBFBD>"<<std::min(c,d)<<endl;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cout<<"2.3<EFBFBD><EFBFBD>3.2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ<EFBFBD>ǣ<EFBFBD>"<<myMin(c,d)<<endl;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>classΪtypename
// cout<<"2<EFBFBD><EFBFBD>'a' <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ<EFBFBD>ǣ<EFBFBD>"<<Min(2,'a')<<endl; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>9-3-1.cpp
cout<<"23 的最小值是:"<<Min<int>(2,3)<<endl; //显式调用
cout<<"23.4 的最小值是:"<<Min(a,b)<<endl;//隐式调用
cout<<"'a''b' 的最小值是:"<<Min('a','b')<<endl;
cout<<"2.33.2的最小值是:"<<Min(c,d)<<endl;
cout<<"2.33.2的最大值是:"<<std::min(c,d)<<endl;//引用命名空间内部的最小值函数
cout<<"2.33.2的最小值是:"<<myMin(c,d)<<endl;//更换classtypename
// cout<<"2'a' 的最小值是:"<<Min(2,'a')<<endl; //报错,不同类型无法处理,请看9-3-1.cpp
system("pause");
return 0;
}