C++ template

所谓模版,就是写定一个模版,通过实例化适用于各种数据类型
(函数模版:对int, double 等都可以统一处理 )

(类模版:如STL中的各种容器,统一对int, double等各种数据类型进行处理的类)

template 的模版主要分为函数模版类模版

(1):函数模版

#include<iostream>
#include<algorithm>
#include <vector>
#include <fstream>
#include <string>
using namespace std;

template <class T>  //模版
T add(T a,T b)  
{
    return a+b;
}

int main()
{
    int x=1;
    int y=1;
    double n=1.3;
    double m=1.2;
    cout<<add(x,y)<<endl; //int加法,实例化出int add(int a,int b)
    cout<<add(n,m)<<endl;  /double,实例化出double add(double a,double b)
    //一个模版函数实现了相当于两个函数的功能,其实还可以更多
    return 0;  
}

写定一个模版,再此基础上实例化具体不同数据类型的函数
"T"相当于待定的数据类型

(2):类模版

下面是一个容器的模版:

#include<iostream>
using namespace std;
template<class T,int smax=100> //类模版可以传值 
class Stack
{
    T *p;           //容器相当于一个数组,p为首地址
    int s_size;    //大小
    int s_max;    //容量
    public:
        Stack();
        ~Stack();
        void push(T a);
        T pop();
        bool empty();
        T operator [](T a);
           
};
template<class T,int smax> Stack<T,smax>::Stack() //注意函数名的格式
{
    if(smax!=100)s_max=smax; 
    else s_max=100;
    s_size=0;
    p=new T[s_max];    
}
template<class T,int smax> Stack<T,smax>::~Stack()
{
    delete [] p; 
}

template<class T,int smax> void Stack<T,smax>::push(T a)
{
    s_size++;
    p[s_size-1]=a;    
}
template<class T,int smax> T Stack<T,smax>::pop()
{
    T t=p[s_size-1];    //先进后出
    size--;
    return t;
}
template<class T,int smax> bool Stack<T,smax>::empty()
{
    return s_size==0;
}
template<class T,int smax> T Stack<T,smax>::operator [](T a)
{
    return p[a];
}


int main()
{
    Stack<int,100>A;
    A.push(1);        //Stack容器(类)的成员函数
    A.push(2);
    cout<<A[0]<<endl;   //需要重载运算符
    cout<<A[1]<<endl;
    return 0;
}

输出结果:
1
2

理解了模版函数,待定数据类型“T”,其实模板类和模版函数是一样的\color{red}{理解了模版函数,待定数据类型“T”,其实模板类和模版函数是一样的}T

都是通过待定数据类型T来应对各种不同数据类型,从而实现所谓的的模版功能\color{red}{都是通过待定数据类型T来应对各种不同数据类型,从而实现所谓的的模版功能}T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值