大家好,我是老A。今天我们要学习的是工程C++,这是一个不可描述的东西。我主要讲的是template。

template的用处是装逼,所以很重要。

C++配备了函数模板和类模板。函数模板就是我们平时的函数改一下就好了,我来举个例子。

#include<bits/stdc++.h>
using namespace std;
template<class T>inline T read(T&x){
    x=0;
    register char c='0';
    while(c<48)c=getchar();
    while(c>47)x=(x<<1)+(x<<3)+(c^48),c=getchar();
}signed main(){
    bool n;
    read(n);
    return 0;
}

有趣,只要改一下C++的自带类型就可以了,如果是min函数,C++的自带不会让你用char类型的,如果我们用一个T来代替,嘿嘿嘿。前面加上class或者typename就可以了。和函数比较呢?比较简单的函数可以用这个代替。电脑自动装换成对应的类型。

下面是另一个例子。

#include<bits/stdc++.h>
using namespace std;
template<class T>T maxx(T x,T y){
    return (x>y)?x:y;
}signed main(){
    int a=1,b=2;
    double c=1.1,d=1.2;
    char e='0',f='1';
    cout<<maxx(a,b)<<"\n"<<maxx(c,d)<<"\n"<<maxx(e,f);
}

太秀了,这个函数模板返回了所有类型,函数模板的作用就这么多了,同时多次调用。

接下来是类模板,他的作用是装逼,说的我和装逼男一样。客观上这个真的是装逼神器,各种private,public和static让你看不懂。

template <class T> class Stack {
    public:
        Stack();
        ~Stack();
        void push(T t);
        T pop();
        bool isEmpty();
    private:
        T *m_pT;        
        int m_maxSize;
        int m_size;
};

#include "stack.cpp"
template <class  T>  Stack<T>::Stack(){
   m_maxSize = 100;      
   m_size = 0;
   m_pT = new T[m_maxSize];
}
template <class T>  Stack<T>::~Stack() {
   delete [] m_pT ;
}
        
template <class T> void Stack<T>::push(T t) {
    m_size++;
    m_pT[m_size - 1] = t;
    
}
template <class T> T Stack<T>::pop() {
    T t = m_pT[m_size - 1];
    m_size--;
    return t;
}
template <class T> bool Stack<T>::isEmpty() {
    return m_size == 0;
}
#include <stdio.h>
#include "stack.h"
int main() {
    Stack<int> intStack;
    intStack.push(1);
    intStack.push(2);
    intStack.push(3);
    
    while (!intStack.isEmpty()) {
        printf("num:%d\n", intStack.pop());
    }
    return 0;
}

我们的private指的是模板类的内置部分,就是类的变量啊,public就是外置的函数,懂了吧。

这个东西的作用就是代替我们常用的结构体内置函数,其实差不多啊。当然这个可以模拟所有类型的混合数据结构,吊吧。

C++的template就讲到这里,完结撒花。

posted on 2019-03-24 15:42  aserrrre  阅读(155)  评论(0编辑  收藏  举报