• 循环队列类模板和函数模板c++实例


    /*此程序是使用函数模板和类模板的一个例子:函数模板为求出数组的前n项和,类模板为一个循环队列类模板*/
    #include<iostream>
    using namespace std;
    template<class T>T Total(T, int);/*函数模板*/
    /*循环队列类模板规则:
    1、当首和尾相同时代表队列为空,即front=real;
    2、往队尾添数据时real在添完后+1,从队首删除数据时front在删完后+1,
    故当(real - front == Maxsize - 1) || front - real == 1时代表队列已满(空出一位来区分队列满和空,size为循环队列的大小)*/
    //此规则为个人定义,不同者大同小异
    template<class K>class Queue{/*队列类模板*/
    int Maxsize, front, real;//代表队列的大小,首和尾
    K * queue;
    public:
    Queue(int size){//size为使用时用户输入的循环队列的大小
    Maxsize = size;
    queue = new K[Maxsize];
    real = front = 0;//预设时数组为空
    }
    bool isEmpty(){//判断队列是否为空
    if (real == front)
    return true;//队列已空
    return false;
    }
    bool isFull(){//判断队列是否是满
    if ((real - front == Maxsize - 1) || front - real == 1)
    return true;//队列已满
    return false;
    }
    void Add(K);//往队尾添数据
    K Delete();//从队首删数据
    ~Queue(){
    delete[]queue;
    }
    };
    //函数成员在体外定义要在函数名前加上限定符,“Queue<K> ”
    template<class K>void Queue<K>::Add(K elem){//往队尾添数据
    if (isFull()){//如果队列已满则退出
    cout << " the queue is full! " << endl;
    return;
    }
    queue[real] = elem;
    real = (real + 1) % Maxsize;
    return;
    }
    template<class K>K Queue<K>::Delete(){//从队首删数据
    if (isEmpty()){
    cout << " the queue is empty!" << endl;
    exit(0);//表示正常终止进程,若参数不为0则表示异常终止
    }
    K res = queue[front];
    front = (front + 1) % Maxsize;
    return res;
    }
    ///////////////////////////////////函数模板原型说明
    template<class T>T Total(T a[], int size){
    T total = a[0];
    for (int i = 1; i < size; i++)
    total = a[i] + total;
    return total;
    };
    ////////////////////////////主函数
    int main(){
    int i = 0, a[20];
    Queue<int> q1(10);//创建一个模板例子
    while (!q1.isFull()){
    q1.Add(i++);
    a[i - 1] = i;
    }
    while (!q1.isEmpty())
    cout << q1.Delete() << " ";
    cout << endl;
    int tt = Total(a, 5);//创建一个函数例子
    cout << "the total of 5 numbers ==" << tt << endl;
    return 0;
    }

    执行结果:

  • 相关阅读:
    命名空间
    XML
    关于命名空间
    gitbook 入门教程之 gitbook 简介
    git 入门教程之备忘录[译]
    git 入门教程之知识速查
    git 入门教程之忽略文件
    git 入门教程之个性化 git
    git 入门教程之里程碑式标签
    git 入门教程之本地和远程仓库的本质
  • 原文地址:https://www.cnblogs.com/1996313xjf/p/5804947.html
Copyright © 2020-2023  润新知