C++学习笔记11

模板

本质上来说,模板就是将类型参数化以解决强类型语言的严格性和灵活性的冲突。当然这一问题的解决还有两种方法,分别为带参数宏定义和重载函数。
  其中普通函数与函数模板可以重载,而且函数模板之间也可以重载。模板一般不进行分文件编写,可就在头文件中实现,头文件后缀为.hpp。
  模板可分为函数模板和类模板,通过模板实例化构造出具体的函数和类称为模板函数和模板类。
  普通函数优先于模板函数的执行。

模板形参的设置
  • 类型参数
  • 非类型参数:常量表达式,整形数据
模板的实例化
  • 显式实例化
  • 隐式实例化
可变模板参数

可变模板参数是C++11新增的最强大特性之一,它对参数进行了高度泛化,能表示任意个参数。
  参数包
①模板参数包 template<class…ARGS>class Tuple,ARGS被称为模板参数包,表示可以接收任意多个参数作为模板参数,编译器将多个模板参数打包成单个模板参数包
②函数参数包 template<class…T> void func(T…args);args称为函数参数包,表示该函数可以接收多个任意类型的参数
C++11要求参数包必须唯一,且为最后一个参数;当声明一个变量为可变参数时,省略号在该变量的左边;当使用参数包时,省略号位于参数包的左侧,表示立即展开该可变参数,此过程也被称为解包

模板实现队列
#pragma once
#include <iostream>
using namespace std;

template<class T>
class Queue
{
   
private:
    T *_arr;//底层数组
    int _size;
    int _front;
    int _rear;//头尾指针
public:
    Queue(int n);
    ~Queue();
    void push(T);
    void pop();
    bool isFull();
    bool isEmpty();
    T getFront();
    T getRear();
    void print();
};

template<class T>
Queue<T>::Queue(int n)
:_arr(new T[n+1]())
,_size(n+1)
,_front(0)
,_rear(0)
{
   
    cout << "Queue(int n)" << endl;
}

template<class T>
Queue<T>::~Queue()
{
   
    if(_arr)
        delete []_arr;
    cout << "~Queue()" << endl;
}

template<class T>
bool Queue<T>::isEmpty()
{
   
    return _front == _rear;
}

template<class T>
bool Queue<T>::isFull()
{
   
    return (_rear+1)%_size == (_front);
}

template<class T>
void Queue<T>::push(T n)
<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值