《C++ primer 》 猎豹网校 模板与泛型编程 2018/10/9

  • 两种模板:类模板、函数模板
  • 泛型编程:   主要用于容器、迭代器、算法-------C++ STL标准模板库
  • 示例:

1,普通队列

2.C++中的泛型队列  

3.顺序队列

4.链式队列

队列——顺序队列   ---系统软件开发,系统的线程池

先进先出(FIFO)或后进后出(LILO)

队首、队尾

队列的操作,push  pop,b

#include <iostream>
#include "顺序队列.h"
#include <algorithm>
using namespace std;

int main()
{
    cout <<"测试顺序队列"<<endl;

    Queue<int> q(5);

    q.Push('A');
    q.Push('B');
    q.Push('C');
    cout <<q.Front() << " ," <<q.Rear()<<endl;
    q.Push('D');
    q.Push('E');
    cout <<q.Front() << " ," <<q.Rear()<<endl;

     cout <<q.Front() << " ," <<q.Rear()<<endl;
     q.Push('100');
      cout <<q.Front() << " ," <<q.Rear()<<endl;
    return 0;

}
#ifndef _顺序队列_H
#define _顺序队列_H

#include <algorithm>
template<class T>
class Queue
{
public:
    Queue(int queueCapacity = 10);  //构造函数,默认值为10
    bool IsEmpty() const;           //判断队列是否为空
    T& Front() const;                //查看队首的数据
    T& Rear() const;                   //查看队尾的数据
    void Push(const T& item);
    void Pop();
private:
    T *queue;
    int front;
    int rear;
    int capacity;
};

//构造函数,将缺省值传给初始化列表,capacity
template<class T>
Queue<T>::Queue(int queueCapacity):capacity(queueCapacity)
{
    if(capacity < 1) throw "Queue capacity must be >0";
    queue = new   T[capacity];
    front = rear = 0;
}

template<class T>
inline bool Queue<T>::IsEmpty() const
{
    return front == rear;   //头和尾的位置相同  即为空
}

template<class T>
void Queue<T>::Push(const T &item)
{
//    if(rear == capacity-1)
//        rear = 0;
//    else
//        rear++;
    if((rear+1)%capacity == front) //队列满了
    {
        //加倍
        T* newQueue = new T[2*capacity];
        int start = (front +1) %capacity;
        if(start <2) //没有回转
            copy(queue+start,queue+start+capacity-1,newQueue);
        else
        {
            copy(queue+start,queue+capacity,newQueue);
            copy(queue,queue+rear+1,newQueue+capacity-start);
        }
        front = 2*capacity-1;
        rear = capacity-2;
        capacity *= 2;
        delete[] queue;
        queue = newQueue;

    }
    rear = (rear+1)%capacity; //高水平
    queue[rear] = item;

}

template<class T>
inline T& Queue<T>::Front() const
{
    if(IsEmpty()) throw "Queue is empty ,No Front element";
    return queue[(front +1) %capacity];
}

template<class T>
inline T& Queue<T> ::Rear() const
{
    if(IsEmpty())   throw "Queue is empty ,no rear element";
    return queue[rear];
}

template<class T>
void Queue<T>::Pop()
{
    if(IsEmpty()) throw "Queue is empty .Canot delete.";
    front = (front+1) %capacity;
    queue[front].~T();
}

#endif // _

 

数据结构与算法_C++[MP4] 猎豹网校VC++ MFC 经典教程 基础篇[MP4] 猎豹网校Java 零基础入门[MP4] 猎豹网校 游戏编程快速入门[MP4] 猎豹网校 网店赢家淘宝网新手开店[MP4] 猎豹网校 透测测试 系统安全测试[MP4] 猎豹网校 淘宝卖家网店美工[MP4] 猎豹网校 搜索引擎搜索技巧[MP4] 猎豹网校 数据结构与算法_Java语言[MP4] 猎豹网校 数据结构与算法_C语言[MP4] 猎豹网校 软件测试快速入门[MP4] 猎豹网校 猎豹网校数据结构与算法_C#语言[MP4] 猎豹网校 快学快用 Excel 应用大全 中级教程[MP4] 猎豹网校 快学快用 Excel 应用大全 高级教程[MP4] 猎豹网校 快学快用 Excel 应用大全 初级教程[MP4] 猎豹网校 快速掌握_会声会影_标准[MP4] 猎豹网校 快速掌握 QTP 测试工具[MP4] 猎豹网校 快速掌握 Python 学习手册[MP4] 猎豹网校 快速掌握 Python 系统管理[MP4] 猎豹网校 快速掌握 Python 基础教程[MP4] 猎豹网校 快速掌握 Python Django 1.5 网页开发[MP4] 猎豹网校 快速掌握 MATLAB 经典教程[MP4] 猎豹网校 快速掌握 LoadRunner 测试工具[MP4] 猎豹网校 快速掌握 C# 学习指南[MP4] 猎豹网校 快速掌握 Access VBA[MP4] 猎豹网校 快速学会_Windows 命令行批处理脚本[MP4] 猎豹网校 快速学会_Shell 脚本经典教程[MP4] 猎豹网校 快速学会 VB.NET 经典教程[MP4] 猎豹网校 快速学会 TclTk 开发指南[MP4] 猎豹网校 快速学会 Perl 实用教程[MP4] 猎豹网校 快速学会 Perl 入门经典[MP4] 猎豹网校 快速通过_计算机二级_公共基础知识[MP4] 猎豹网校 快速通过_计算机二级_VFP[MP4] 猎豹网校 快速通过_计算机二级_VB[MP4] 猎豹网校 快速通过_计算机二级_Java[MP4] 猎豹网校 快速通过_计算机二级_C语言[MP4] 猎豹网校 快速通过_计算机二级_C++[MP4] 猎豹网校 黑客攻防 网站攻防修炼[MP4] 猎豹网校 黑客攻防 木马揭秘[MP4] 猎豹网校 黑客攻防 蜜罐[MP4] 猎豹网校 高级软件测试分析师[MP4] 猎豹网校 大家可以学的C语言[MP4] 猎豹网校 Windows程序设计 初级课程(二)[MP4] 攻防[MP4] 北风网 C++反汇编基础:Win32平台(逆向实例、动态调试实例)[MP4] 安卓 Android 游戏编程入门(上)[MP4] Word排版高级技巧[MP4] Word 零基础入门[MP4] Windows程序设计 初级课程(一)[MP4] Windows Api学习指南[MP4] VisualSVN Subversion[MP4] Visual C# 入门经典[MP4] VC++ MFC快速提高[MP4] VC++ MFC快速入门[MP4] VC++ MFC快速进阶[MP4] Unity 3D 游戏开发经典教程[MP4] Unity 3D 游戏高级教程[MP4] SQL Server 数据库[MP4] Silverlight 经典教程[MP4] Qt 中级课程 (上)[MP4] Python系统管理[MP4] PS抠图秘技[MP4] ppyygg PowerPoint(PPT) 达人进阶[MP4] PHP基础教程[MP4] PHP和MySQL Web开发 高级教程[MP4] PHP和MySQL Web开发 初级教程[MP4] PHP 程序设计[MP4] PHP Zend 开发实战[MP4] PHP Ajax 经典教程[MP4] Oracle 数据库[MP4] MySQL 数据库[MP4] Lua 经典教程[MP4] Linux 轻松入门[MP4] Linux C 基础教程[MP4] JSP 实用教程[MP4] jQuery 快速入门[MP4] Java设计模式[MP4] JavaScript 经典教程[MP4] Java 编程思想 中级教程[MP4] Java 编程思想 高级教程[MP4] Java 编程思想 初级教程[MP4] HTML网页设计[MP4] Flash CS5 经典教程[MP4] Flash ActionScript 经典教程MP4] Flash ActionScript 基础教程MP4] Excel 零基础
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值