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

@@ -5,7 +5,7 @@ using namespace std;
int main(int argc, char const *argv[])
{
string name[]={"张三","李四","王麻子"};
string name[]={"张三","李四","王麻子"};
double salary[]={1200,2000,1450};
map<string,double>sal;
map<string,double>::iterator p;
@@ -18,7 +18,7 @@ int main(int argc, char const *argv[])
cout<<p->first<<"\t"<<p->second<<endl;
}
string person;
cout<<"输入查找人员的姓名:";
cout<<"输入查找人员的姓名:";
cin>>person;
int flag=1;
for(p=sal.begin();p!=sal.end();p++)
@@ -27,18 +27,18 @@ int main(int argc, char const *argv[])
flag=0;
}
if(flag)
cout<<"没查找到对应的结果!"<<endl;
cout<<"没查找到对应的结果!"<<endl;
cout<<"输入待删除的人员的姓名:";
cout<<"输入待删除的人员的姓名:";
cin>>person;
map<string,double>::iterator it;
it = sal.find(person);
if(it!=sal.end()){
cout<<"查找成功:"<<(*it).first<<":"<<(*it).second<<endl;
cout<<"查找成功:"<<(*it).first<<":"<<(*it).second<<endl;
sal.erase(it);
cout<<"删除成功"<<endl;
cout<<"删除成功"<<endl;
}
cout<<"删除后的结果为"<<endl;
cout<<"删除后的结果为"<<endl;
for(p=sal.begin();p!=sal.end();p++){
cout<<p->first<<p->second<<endl;
}

View File

@@ -6,21 +6,21 @@ template <class T>
T Max(T a,T b) {
return (a>b)?a:b;
}
//特化
//template <> 返回类型 函数名<特化的数据类型>(参数表) {}
//特化
//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的最大值是"<<Max(3,2)<<endl;
cout<<"c,d的最大值是"<<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");
}
/*
① 当程序中同时存在模板和它的特化时,特化将被优先调用;
② 在同一个程序中除了函数模板和它的特化外还可以有同名的普通函数。其区别在于C++会对普通函数的调用实参进行隐式的类型转换,
但不会对模板函数及特化函数的参数进行任何形式的类型转换。
① 当程序中同时存在模板和它的特化时,特化将被优先调用;
② 在同一个程序中除了函数模板和它的特化外还可以有同名的普通函数。其区别在于C++会对普通函数的调用实参进行隐式的类型转换,
但不会对模板函数及特化函数的参数进行任何形式的类型转换。
*/

View File

@@ -6,16 +6,16 @@ T Max(T a,T b) {
return (a>b)?a:b;
}
/*
C++在实例化函数模板的过程中,只是简单地将模板参数替换成调用实参的类型,并以此生成模板函数,不会进行参数类型的任何转换。
C++在实例化函数模板的过程中,只是简单地将模板参数替换成调用实参的类型,并以此生成模板函数,不会进行参数类型的任何转换。
*/
int main(){
double a=2,b=3.4;
float c=5.1,d=3.2;
//在模板调用时进行参数类型的强制转换
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;
//在模板调用时进行参数类型的强制转换
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>
//注意一点max与min使用的时候容易引起冲突如果写了下面这一行代码则要改变函数模板名字否则直接使用std::cout与std::endl
//注意一点max与min使用的时候容易引起冲突如果写了下面这一行代码则要改变函数模板名字否则直接使用std::cout与std::endl
using namespace std;
/*
不要把这里的class与类的声明关键字class混淆在一起虽然它们由相同的字母组成但含义是不同的。
这里的class表示T是一个类型参数可以是任何数据类型如int、float、char等或者用户定义的struct、enum或class等自定义数据类型。
不要把这里的class与类的声明关键字class混淆在一起虽然它们由相同的字母组成但含义是不同的。
这里的class表示T是一个类型参数可以是任何数据类型如int、float、char等或者用户定义的struct、enum或class等自定义数据类型。
*/
template <class T>
T Min(T a,T b) {
return (a<b)?a:b;
}
/*
为了区别类与模板参数中的类型关键字class标准C++提出?了用typename作为模板参数的类型关键字同时也支持使用class。
比如把min定义的template <class T>写成下面的形式是完全等价的:
为了区别类与模板参数中的类型关键字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){
}
/*
模板实例化发生在调用模板函数时。当编译器遇到程序中对函数模板的调用时,
它才会根据调用语句中实参的具体类型,确定模板参数的数据类型,
并用此类型替换函数模板中的模板参数,生成能够处理该类型的函数代码,即模板函数。
当多次发生类型相同的参数调用时只在第1次进行实例化。编译器只在第1次调用时生成模板函数
当之后遇到相同类型的参数调用时不再生成其他模板函数它将调用第1次实例化生成的模板函数。
模板实例化发生在调用模板函数时。当编译器遇到程序中对函数模板的调用时,
它才会根据调用语句中实参的具体类型,确定模板参数的数据类型,
并用此类型替换函数模板中的模板参数,生成能够处理该类型的函数代码,即模板函数。
当多次发生类型相同的参数调用时只在第1次进行实例化。编译器只在第1次调用时生成模板函数
当之后遇到相同类型的参数调用时不再生成其他模板函数它将调用第1次实例化生成的模板函数。
*/
int main(){
double a=2,b=3.4;
float c=2.3,d=3.2;
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;//更换class为typename
// cout<<"2'a' 的最小值是:"<<Min(2,'a')<<endl; //报错,不同类型无法处理请看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;//更换class为typename
// cout<<"2'a' 的最小值是:"<<Min(2,'a')<<endl; //报错,不同类型无法处理请看9-3-1.cpp
system("pause");
return 0;
}

View File

@@ -1,5 +1,5 @@
/*
设计一个堆栈的类模板Stack在模板中用类型参数T表示栈中存放的数据用非类型参数MAXSIZE代表栈的大小。
设计一个堆栈的类模板Stack在模板中用类型参数T表示栈中存放的数据用非类型参数MAXSIZE代表栈的大小。
*/
#include<iostream>
using namespace std;
@@ -32,14 +32,14 @@ class Stack{
}
};
/*
原型:
template <模板参数列表>
返回值类型 类模板名<模板参数名表>::成员函数名 (参数列表){};
原型:
template <模板参数列表>
返回值类型 类模板名<模板参数名表>::成员函数名 (参数列表){};
*/
template<class T, int MAXSIZE>
void Stack<T,MAXSIZE>::push(T e){
if(full()){
cout<<"栈已满,不能再添加元素了!";
cout<<"栈已满,不能再添加元素了!";
return;
}
elem[++top]=e;
@@ -48,7 +48,7 @@ void Stack<T,MAXSIZE>::push(T e){
template<class T, int MAXSIZE>
T Stack<T,MAXSIZE>::pop(){
if(empty()){
cout<<"栈已空,不能再弹出元素了!"<<endl;
cout<<"栈已空,不能再弹出元素了!"<<endl;
return 0;
}
return elem[top--];
@@ -57,7 +57,7 @@ T Stack<T,MAXSIZE>::pop(){
int main(int argc, char const *argv[])
{
//类模板实例化
//类模板实例化
Stack<int,10> iStack;
Stack<char,10> cStack;
iStack.setEmpty();

View File

@@ -1,4 +1,4 @@
//设计一通用数组类,它能够直接存取数组元素,并能够对数组进行从大到小的排序。
//设计一通用数组类,它能够直接存取数组元素,并能够对数组进行从大到小的排序。
#include<iostream>
#include<cstring>
@@ -20,7 +20,7 @@ class Array{
template<class T> T& Array<T>::operator[](int i){
if(i<0||i>Size-1){
cout<<"\n数组下标越界!"<<endl;
cout<<"\n数组下标越界!"<<endl;
exit(1);
}
return a[i];
@@ -39,7 +39,7 @@ template<class T> void Array<T>::Sort(){
a[i]=t;
}
}
//template <> 返回类型 类模板名<特化的数据类型>::特化成员函数名(参数表){}
//template <> 返回类型 类模板名<特化的数据类型>::特化成员函数名(参数表){}
template<> void Array<char *>::Sort(){
int p;
for(int i=0;i<Size-1;i++){