zoukankan      html  css  js  c++  java
  • 循环队列类模板和函数模板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;
    }

    执行结果:

  • 相关阅读:
    安装的时候,突然安装程序关闭,的灵异问题。
    CSAPP阅读笔记(1)-序
    CSAPP阅读笔记(2)-虚存管理
    nafxcwd.lib(afxmem.obj) :error LNK2005:"void * __cdecl operator new(unsigned int)"
    Linux内核源代码情景分析读书笔记(5)-关于fork/clone/vfork
    [转]调试经验总结VC下的错误对话框
    IP数据包首部的校验和算法
    Matlab画图及生成exe文件
    VC++6.0中的new
    Linux内核模块编译、加载&卸载及查看运行结果
  • 原文地址:https://www.cnblogs.com/1996313xjf/p/5804947.html
Copyright © 2011-2022 走看看