Back to Cplusplusthings

Readme

practical_exercises/10_day_practice/day8/readme.md

latest3.1 KB
Original Source

ģ壨templateC++ʵִûƵҪߣǷͼ޹صͨóƼĻ ģC++Խµ?Իƣʵ޹صͨ㷨ƣܹЧʣdz븴õǿߡ

Ҫ˺ģģ࣬ԼSTLеļģ͡ һģ 1ģ ģǶԾͬԵĺٳģһֲ̬ԵĹߣΪ߼ͬͲͬijṩһִ빲Ļơ һģ岢һʵʵڵĺ࣬һDzĺࡣ 2ģ ģ ģ 3.ģģ庯 ģṩһͨõĺΪúΪöֲͬͽеãݵԶʵΪ͵ĺ룬Ҳ˵ģһ塣 ͨȣģijЩԪصδȷģЩԪصͽʹʱغȣģ岻ҪԱظд룬Զ๦ͬͷֵͲͬĺ ģ 1ģĶ

c++
template <class T1, class T2,> (){
   	 								//ģ嶨
}

templateǶģĹؼ֣дһ<>еT1T2ģеclassʾIJ͡ ģΪͲģʵģ庯ʱʱҪݵʵһͣintdouble֮ࡣ ģIJгģT1T2 2ʹúģע ڶģʱtemplate뺯ģ嶨֮κ䡣

c++
template <class T>
int x;                 //󣬲ڴλκ
T min(T a,T b){}

ģжͲÿͲùؼclasstypename޶⣬ģлԳȷͲΪͲ

c++
template <class T1,class T2,class T3,int T4>
T1 fx(T1 a, T 2 b, T3 c){}

ڴʵʱͲT4ֻʹó ҪclassؼclassһȻͬĸɣDzͬġclassʾTһͲκͣintfloatcharȣûstructenumclassԶ͡ Ϊģе͹ؼclass׼C++?typenameΪģ͹ؼ֣ͬʱҲ֧ʹclass磬mintemplate <class T>дʽȫȼ۵ģ

c++
template <typename T> 
T min(T a,T b){}

3.ģʵ

  • ʵʱ ģʵڵģ庯ʱжԺģĵʱŻݵʵεľͣȷģͣô滻ģеģܹ͵ĺ룬ģ庯
  • ηͬIJʱֻڵ1νʵĺã
c++
int x=min(2,3);     
int y=min(3,9);
int z=min(8.5);

ֻڵ1εʱģ庯֮ͬ͵IJʱģ庯õ1ʵɵģ庯

  • ʵķʽ

ʽʵ

ܹжģʱԶʵģΪģ庯

c++
template <typename T> T max (T, T);

int i = max (1, 2); 
float f = max (1.0, 2.0);
char ch = max (a, A);

ʽʵڵģ壬ʵǵʵ

ʾʵexplicit instantiation ʱ,жģͻֵ Ҫʹضʵ ﷨ʽ:: ģ<,,ֵ,> ()

c++
template <class T> T max (T, T);

int i = max (1, 2); 
// error: data type cant be deduced
int i = max<int> (1, 2);

4.ģػ

  • ػԭ ijЩ£ģͨ㷨ʺضijϣ͵ȣ 磺max
c++
char * cp = max (abcd, 1234);
ʵΪchar * max (char * a, char * b){return a > b ? a : b;}

϶ģΪַıȽΪ

c++
char * max (char * a, char * b)
{	return strcmp(a, b)>0 ? a : b;   }
  • ػ νػģ岻ܴͣдģͬ⺯רŴЩ͡ ģػĶʽ template <> <ػ>() {

} ˵ template < >ģػĹؼ֣< >вҪκݣ < >Ҫػ͡

5.˵ ͬʱģػʱػȵã ͬһУ˺ģػ⣬ͬͨC++ͨĵʵνʽתģ庯ػIJκʽת 6.˳ ͬһоģͨʱƥ˳£ ȫƥķģ庯 ȫƥģ庯 ݵķģ庯 ģ 1.ģĸ ģƽṹͳԱȫͬͲͬͨࡣ ջ ˫ջ

c++
class doubleStack{
    private:
    double data[size];
    
};

ַջ

c++
class charStack{
    private:
    char data[size];
    
};

Щջ֮⣬ȫͬͿģʵ֡

2.ģ

c++
template<class T1,class T2,>
class {
    									// Ա붨
}

T1T2Ͳ ģпжģͲͷͲ

3.Ͳ

Ͳָij־ͣڵģʱֻΪṩӦ͵ijֵͲƵģͨ͡ö͡ãԼ󡢺Աָ룬øͣ˫ͣvoidΪͲ

ģУT1T2ͲT3ǷͲ

c++
template<class T1,class T2,int T3>

ʵʱΪT1T2ṩһͣΪT3ָһ10ģܱȷʵ

4.ģijԱĶ 1ģⶨ壬﷨ template <ģб> ֵ ģ<ģ>::Ա (б) { }; 2Ա壬볣ԱĶƣ ģбġͱʶΪʹ ģбġͨͳΪʹ 5.ģػ

ػ 9-9ķػģͬΪijרдһģࡣ ģػʽһػģ壬һػԱ ػԱķ

c++
template <>  ģ<ػ>::ػԱ(){
    								//
}
c++
template<>  void Array<char *>::Sort(){
    for(int i=0;i<Size-1;i++){
        int p=i;
        for(int j=i+1;j<Size;j++)
            if(strcmp(a[p],a[j])<0)
                p=j;
        char* t=a[p];
        a[p]=a[i];
        a[i]=t;
    }
}