博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
标准库Queue的实现
阅读量:5809 次
发布时间:2019-06-18

本文共 3058 字,大约阅读时间需要 10 分钟。

跟上篇实现stack的思路一致,我增加了一些成员函数模板,支持不同类型的Queue之间的复制和赋值。

同时提供一个异常类。

代码如下:

#ifndef QUEUE_HPP#define QUEUE_HPP#include "Exception.h"#include 
class EmptyQueueException : public Exception{public: EmptyQueueException() :Exception("read empty queue") { }};template
>class Queue{public: typedef T value_type; typedef T& reference; typedef const T& const_reference; typedef Container container_type; //容器类型 typedef EmptyQueueException exception_type; //异常类型 typedef typename Container::size_type size_type; typedef Container &container_reference; //容器引用 typedef const Container& const_container_reference; explicit Queue(const_container_reference cont = container_type()) :cont_(cont) { } template
Queue
(const Queue
&other); template
Queue
&operator=(const Queue
&other); void push(const value_type &val) { cont_.push_back(val); } void pop() { if(cont_.empty()) throw exception_type(); cont_.pop_front(); } reference front() { if(cont_.empty()) throw exception_type(); return cont_.front(); } const_reference front() const { if(cont_.empty()) throw exception_type(); return cont_.front(); } reference back() { if(cont_.empty()) throw exception_type(); return cont_.back(); } const_reference back() const { if(cont_.empty()) throw exception_type(); return cont_.back(); } bool empty() const { return cont_.empty(); } size_type size() const { return cont_.size(); } //获取内部容器的引用 const_container_reference get_container() const { return cont_; } friend bool operator==(const Queue &a, const Queue &b) { return a.cont_ == b.cont_; } friend bool operator!=(const Queue &a, const Queue &b) { return a.cont_ != b.cont_; } friend bool operator<(const Queue &a, const Queue &b) { return a.cont_ < b.cont_; } friend bool operator>(const Queue &a, const Queue &b) { return a.cont_ > b.cont_; } friend bool operator<=(const Queue &a, const Queue &b) { return a.cont_ <= b.cont_; } friend bool operator>=(const Queue &a, const Queue &b) { return a.cont_ >= b.cont_; }private: container_type cont_;};template
template
Queue
::Queue(const Queue
&other) :cont_(other.get_container().begin(), other.get_container().end()){}template
template
Queue
&Queue
::operator=(const Queue
&other){ cont_.assign(other.get_container().begin(), other.get_container().end());}#endif //QUEUE_HPP

测试代码如下:

#include "Stack.hpp"#include "Queue.hpp"#include 
#include
#include
#include
#include
using namespace std;int main(int argc, char const *argv[]){ try { Queue
> st; st.push("foo"); st.push("bar"); Queue
> st2(st); //st2 = st; while(!st2.empty()) { cout << st2.front() << endl; st2.pop(); } st2.pop(); //引发异常 } catch (const Exception& ex) { fprintf(stderr, "reason: %s\n", ex.what()); fprintf(stderr, "stack trace: %s\n", ex.stackTrace()); } return 0;}

转载于:https://www.cnblogs.com/inevermore/p/4006336.html

你可能感兴趣的文章
【安全牛学习笔记】提权
查看>>
HCNA——RIP的路由汇总
查看>>
javaweb开发之Filter实现过滤非法文字
查看>>
zabbix监控php状态(四)
查看>>
定时任务的创建
查看>>
【笔记】两个修复网络的命令
查看>>
实战Django:小型CMS Part2
查看>>
原创]windows server 2012 AD架构试验系列 – 16更改DC计算机名
查看>>
Symantec Endpoint Protection下载方法
查看>>
统治世界的十大算法
查看>>
mac安装gcc
查看>>
网络磁盘映射策略脚本
查看>>
linux svn安装和配置
查看>>
SSH中调用另一action的方法(chain,redirect)
查看>>
数据库基础
查看>>
表格排序
查看>>
updatepanel中的GridView中的radiobuttonList怎么设置样式
查看>>
快速学习javaSE基础4---面向对象的编程
查看>>
关于Android四大组件的学习总结
查看>>
LeetCode 398: Random Pick Index
查看>>