`

标准类库 queue模板类的简单实现

阅读更多

最近学模板,于是就简单做了个 queue 模板类,没啥技巧性,见笑了……

 

/* THE PROGRAM IS MADE BY PYY */

#include <iostream>

using namespace std ;

//////////////////////////////////////////////////////////////////////////
//
// Decleration
//

template <class T>
class QueueItem ;

template <class T>
class Queue ;

//////////////////////////////////////////////////////////////////////////
//
// QueueItem
//

template <class T>
class QueueItem {
	friend class Queue<T> ;
private:
	T 				elem ;
	QueueItem		*prev ;
	QueueItem	 	*next ;
	
	QueueItem (const T &t = *(new T), QueueItem *p = 0, QueueItem *n = 0)
		: elem(t), prev(p), next(n) {}
} ;

//////////////////////////////////////////////////////////////////////////
//
// Queue
//

template <class T>
class Queue {
public:
	Queue () : head(new QueueItem<T>), tail(new QueueItem<T>), theSize(0) {
		head->next = tail ;
		tail->prev = head ;
	}
	~Queue () { delete head ; delete tail ; }
	bool empty () const { return head->next == tail; }
	size_t size() const { return theSize ; }
	void push (const T &t) { 
		QueueItem<T> *p = new QueueItem<T>(t, tail->prev, tail) ;
		tail->prev->next = p ;
		tail->prev = p ;
		
		++theSize ;
	}
	T 		& front () 		 { return head->next->elem ; }
	const T & front () const { return head->next->elem ; }
	T 		& back  () 		 { return tail->prev->elem ; }
	const T & back  () const { return tail->prev->elem ; }
	void pop () { 
		if (empty()) 
			return ;
		
		QueueItem<T> *poldest = head->next ;
		head->next = poldest->next ;
		delete poldest ;
		
		--theSize ;
	}
private:
	QueueItem<T>	*head ;
	QueueItem<T>	*tail ;
	size_t			theSize ;
} ;
 
0
0
分享到:
评论

相关推荐

    自定义模板类库

    模板类可以这样实现: ```cpp // 选择排序 template void selectionSort(T arr[], int n); // 冒泡排序 template void bubbleSort(T arr[], int n); // 归并排序 template void mergeSort(T arr[], int left, ...

    java 2类库参考手册

    6. **集合框架(Collection Framework)**:`java.util`包中的集合框架提供了一系列接口(如`List`, `Set`, `Queue`)和实现这些接口的类(如`ArrayList`, `HashSet`, `LinkedList`),它们是存储和操作对象的容器。...

    C和C++类库手册说明

    cppreference.chm文件是C++参考手册的集成,其中包含了C++标准库的所有细节,包括类、函数、模板、异常处理、预处理器宏等。它是开发者解决问题、学习新知识的重要参考资料。通过这个手册,开发者可以迅速找到所需的...

    TBB 模板类库

    总结来说,TBB库通过其丰富的模板类,为C++程序员提供了一种强大且高效的工具,使得并行编程变得更加简单和直观,帮助开发者充分利用多核处理器的潜力,提升应用程序的性能。在实际项目中,熟练运用TBB能够使代码...

    Tools - Template Queue

    在IT领域,模板队列(Template Queue)是一种利用模板类和队列数据结构技术实现的通用数据处理工具。模板在C++编程语言中扮演着重要角色,它允许我们创建可以处理不同类型数据的泛型类。这里提到的"Tools - Template...

    uvm类库手册

    UVM的“序列”(Sequence)类是用于生成测试数据的模板,它可以生成随机序列或预定义的激励序列,以覆盖各种可能的测试情况。 在实际应用中,理解并掌握UVM的“事务”(Transaction)概念也至关重要。事务是数据在...

    数据结构各种算法实现(C++模板)

    在C++中可以使用标准模板库中的字符串类来处理字符串,但在需要底层实现时,我们可以用模板类MyString来封装字符串的基本操作,如构造、赋值、比较、连接等。 二叉树(BinaryTree)是一种分层的数据结构,每个节点...

    C++模板与STL库介绍入门基础.ppt

    泛型程序设计简单地说就是使用模板的程序设计法,将一些常用的数据结构(比如链表,数组,二叉树)和算法(比如排序,查找)写成模板,以后则不论数据结构里放的是什么对象,算法针对什么样的对象,则都不必重新实现...

    C# 常用类库(大部分可以直接到项目开发).rar

    其中的子文件"DotNet.Utilities"很可能是一个集合了多种实用工具类的库,方便开发者快速实现常见的功能。下面将详细探讨C#常用类库及其应用,以及可能包含在"DotNet.Utilities"中的功能。 1. **System.IO**: 这个...

    推箱子QT入门项目纯c++,STL类库

    而STL(Standard Template Library,标准模板库)是C++编程中的一部分,提供了容器(如vector、list、set)、迭代器、函数对象(functors)和算法等工具,极大地提高了C++的效率和可维护性。 在这个项目中,我们...

    Standard C++ Class

    《标准C++类》是一份深入且全面的C++学习资源,主要涵盖了C++编程语言中的标准类库,这是C++编程的核心组成部分。C++是一种强类型、静态类型的面向对象编程语言,它在C语言的基础上增加了类、模板、异常处理等特性,...

    C++进阶课程讲义_v1.0.4.pdf

    6、 函数模板和类模板 3 6.1函数模板 4 6.1.1为什么要有函数模板 4 6.1.2函数模板语法 5 6.1.3函数模板和模板函数 6 6.1.4函数模板做函数参数 6 6.1.5函数模板遇上函数重载 8 6.1.6 C++编译器模板机制剖析 10 6.2类...

    传智播客扫地僧视频讲义源码

    22_案例_数组模板类_类的实现和测试_传智扫地僧 23_案例_数组模板类_数组元素存储的是类对象思想抛砖_传智扫地僧 24_作业 代码 文档 01_泛型编程_知识点梳理 02_模板数组类_作业讲解和思想强化(数据类型和算法的分离...

    C语言和C++ API.rar

    3. 继承和多态:通过`class`关键字定义类,用`public`、`protected`和`private`控制访问权限,`virtual`关键字实现多态。 4. 输入/输出流:`std::ifstream`、`std::ofstream`和`std::stringstream`等,以及`std::cin...

    mfc实现计算器

    通过遍历字符串,解析数字和运算符,我们可以利用标准库中的std::stack或std::queue来实现运算符优先级的计算。注意,为了正确处理除法运算,需要检查除数是否为零,防止运行时错误。 此外,我们还需要考虑清除按钮...

    Java入门很简单教学PPT

    11. **集合框架**:Java集合框架包括List、Set、Queue等接口和ArrayList、HashSet、LinkedList等实现类,用于存储和操作对象。 12. **IO流**:Java的输入/输出系统基于流,提供了读写文件、网络通信的能力。 13. *...

    c++库函数参考手册

    1. **标准模板库(STL)**:STL是C++库中最重要的一部分,由容器、迭代器、算法和函数对象组成。容器如vector、list、deque、set、map等,它们各自有不同的特性和用途。迭代器允许程序在容器中遍历元素,而算法则...

    与MQ通讯的完整JAVA程序.doc

    本程序使用Java语言与MQ进行集成,使用IBM提供的MQ类库,实现了与MQ服务器的连接、消息的发送和接收等功能。 知识点3:MQEnvironment类 MQEnvironment类是IBM提供的类,用于设置MQ环境变量。该类提供了多个静态变量...

    fifo.rar_Visual C++ fifo

    在C++中,可以使用标准模板库(STL)中的`queue`容器来实现FIFO,但自定义FIFO类可以提供更多的灵活性和特定的功能,比如对队列操作的记录、性能优化或特定类型的元素管理。 "fifo"这个文件可能是压缩包中的核心...

Global site tag (gtag.js) - Google Analytics