美文网首页C/C++
(二十九)模板

(二十九)模板

作者: RGiskard | 来源:发表于2018-11-07 15:47 被阅读0次

函数模板

  • 为了表达一个通用的算法或逻辑
//求最大值
int max(int arr[],int len)
{
    ...
}
double max(...)
{
    ...
}
Object max(...)
{
    ...
}

上面三个要表达的算法都是相同的,唯一区别就是参与运算的数据类型不同,使用函数模板可以将这三个简化为一个

template <typename T>

T max(T arr[],int len)
{
    T val = arr[0];
    for(int i=1;i<len;i++)
    {
        if(arr[i]>val)
        {
            val = arr[i];
        }
    }
    return val;
}

int main()
{
    int arr[4] = {1,2,3,4};
    int result = max<int>(arr,4);  //max<int>()表示对模板实例化,用int代替T,直接调用max(arr,4)是不正确的
    return 0;
}

类模板

有的类只描述了一些通用的算法和逻辑,可以用类模板代替。比如对于链表来说,无论数据类型是什么,其插入删除遍历算法是一样的

template <typename T>

class List
{
public:
    void insert(const T& node)
    {
        
    }
    int length()
    {
        
    }
}

List<int> mylist; //对类模板List的实例化
int len = mylist.lengh;
  • 与普通的类写法不一样,类模板的声明和定义都要写在*.h文件里,不建议使用分离式写法。

模板参数

template <int N,typename T> //尖括号内有多个参数

T* create()
{
    T* str = new T[N];
    return str;
}

//等价于

template <typename T> 

T* create(int N)
{
    T* str = new T[N];
    return str;
}

实例:栈

///Stack.h
template <typename T>
class Stack
{
private:
    T* m_buffer;
    int m_maxsize;
    int m_size;
public:
    Stack(int maxsize)
    {
        m_maxsize = maxsize;
        m_buffer = new T[maxsize];
        m_size;   //初始长度为0
    }
    ~Stack()
    {
        delete[] m_buffer;
    }
    
    //推入元素
    bool push(const T& value)
    {
        if(m_size>=m_maxsize) return false;
        m_buffer[m_size] = value;
        m_size++;
        return true;
    }
    
    //弹出元素
    T pop()
    {
        T last = m_buffer[m_size-1];
        m_size--;
        return last;
    }
    
    //得到栈顶元素
    const T& top()
    {
        return m_buffer[m_size-1];
    }
    
    int size()
    {
        return m_size;
    }
}

///main.cpp
#include "Stack.h"
{
    Stack<int>mystack(10);
    mystack.push(0);
    mystack.push(1);
    ...
    while(mystack.size()>0)
    {
        int n = mystack.pop();
    }
}

相关文章

  • (二十九)模板

    函数模板 为了表达一个通用的算法或逻辑 上面三个要表达的算法都是相同的,唯一区别就是参与运算的数据类型不同,使用函...

  • 领导力培训和发展行业的电子学习模板

    模板一: 模板二: 模板三: 模板四: 模板五: 模板六: 模板七: 模板八: 模板九: 模板十: 模板十一: 模...

  • 2020|12|29

    十二月二十九十二月二十九十二月二十九 十二月二十九十二月二十九了十二月二十九了呀 又是到了一个我敬往事一杯酒的时候...

  • 第二十九课 ДВАДЦАТЬ ДЕВЯТЫЙ УРОК

    单词 Слова: двадцать девять(数)二十九 двадцать девятый(数)第二十九 и...

  • 有了这套画册模板设计之路不再迷茫!超赞!

    indesign模板介绍 时尚写真画册模板、婚礼画册模板、摄影写真画册模板、 人物展示画册模板、服装展示画册模板;...

  • 08_模板层补充

    模板层 一、模板层导入与继承 模板导入: 先码一个好看的模板 语法:{% include '模板名称' %} 模板...

  • 《PHP Learning》模板引擎

    《PHP Learning》模板引擎 模板处理使用正则处理模板替换规则保存模板编译结果 模板使用 自定义模板引擎 ...

  • C++模板编程/泛型编程

    模板分类 模板分为函数模板与类模板两类。 函数模板 模板声明 模板定义 例如 函数模板实参类型不一致问题 参数推导...

  • 14/15

    约束模板友元 模板类的外边定义一个模板函数,在模板类中将模板函数具体化为模板类的友元函数 非约束模板友元 模板类中...

  • ★07.关于类模板

    简述 类模板:是类类型的模板,如:vector。 模板类:类模板的实例化,如:vector 。 类模板的模板参数无...

网友评论

    本文标题:(二十九)模板

    本文链接:https://www.haomeiwen.com/subject/ujyvxqtx.html