最近学模板,于是就简单做了个 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 ;
} ;
分享到:
相关推荐
模板类可以这样实现: ```cpp // 选择排序 template void selectionSort(T arr[], int n); // 冒泡排序 template void bubbleSort(T arr[], int n); // 归并排序 template void mergeSort(T arr[], int left, ...
6. **集合框架(Collection Framework)**:`java.util`包中的集合框架提供了一系列接口(如`List`, `Set`, `Queue`)和实现这些接口的类(如`ArrayList`, `HashSet`, `LinkedList`),它们是存储和操作对象的容器。...
cppreference.chm文件是C++参考手册的集成,其中包含了C++标准库的所有细节,包括类、函数、模板、异常处理、预处理器宏等。它是开发者解决问题、学习新知识的重要参考资料。通过这个手册,开发者可以迅速找到所需的...
总结来说,TBB库通过其丰富的模板类,为C++程序员提供了一种强大且高效的工具,使得并行编程变得更加简单和直观,帮助开发者充分利用多核处理器的潜力,提升应用程序的性能。在实际项目中,熟练运用TBB能够使代码...
在IT领域,模板队列(Template Queue)是一种利用模板类和队列数据结构技术实现的通用数据处理工具。模板在C++编程语言中扮演着重要角色,它允许我们创建可以处理不同类型数据的泛型类。这里提到的"Tools - Template...
UVM的“序列”(Sequence)类是用于生成测试数据的模板,它可以生成随机序列或预定义的激励序列,以覆盖各种可能的测试情况。 在实际应用中,理解并掌握UVM的“事务”(Transaction)概念也至关重要。事务是数据在...
在C++中可以使用标准模板库中的字符串类来处理字符串,但在需要底层实现时,我们可以用模板类MyString来封装字符串的基本操作,如构造、赋值、比较、连接等。 二叉树(BinaryTree)是一种分层的数据结构,每个节点...
泛型程序设计简单地说就是使用模板的程序设计法,将一些常用的数据结构(比如链表,数组,二叉树)和算法(比如排序,查找)写成模板,以后则不论数据结构里放的是什么对象,算法针对什么样的对象,则都不必重新实现...
其中的子文件"DotNet.Utilities"很可能是一个集合了多种实用工具类的库,方便开发者快速实现常见的功能。下面将详细探讨C#常用类库及其应用,以及可能包含在"DotNet.Utilities"中的功能。 1. **System.IO**: 这个...
而STL(Standard Template Library,标准模板库)是C++编程中的一部分,提供了容器(如vector、list、set)、迭代器、函数对象(functors)和算法等工具,极大地提高了C++的效率和可维护性。 在这个项目中,我们...
《标准C++类》是一份深入且全面的C++学习资源,主要涵盖了C++编程语言中的标准类库,这是C++编程的核心组成部分。C++是一种强类型、静态类型的面向对象编程语言,它在C语言的基础上增加了类、模板、异常处理等特性,...
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_模板数组类_作业讲解和思想强化(数据类型和算法的分离...
3. 继承和多态:通过`class`关键字定义类,用`public`、`protected`和`private`控制访问权限,`virtual`关键字实现多态。 4. 输入/输出流:`std::ifstream`、`std::ofstream`和`std::stringstream`等,以及`std::cin...
通过遍历字符串,解析数字和运算符,我们可以利用标准库中的std::stack或std::queue来实现运算符优先级的计算。注意,为了正确处理除法运算,需要检查除数是否为零,防止运行时错误。 此外,我们还需要考虑清除按钮...
11. **集合框架**:Java集合框架包括List、Set、Queue等接口和ArrayList、HashSet、LinkedList等实现类,用于存储和操作对象。 12. **IO流**:Java的输入/输出系统基于流,提供了读写文件、网络通信的能力。 13. *...
1. **标准模板库(STL)**:STL是C++库中最重要的一部分,由容器、迭代器、算法和函数对象组成。容器如vector、list、deque、set、map等,它们各自有不同的特性和用途。迭代器允许程序在容器中遍历元素,而算法则...
本程序使用Java语言与MQ进行集成,使用IBM提供的MQ类库,实现了与MQ服务器的连接、消息的发送和接收等功能。 知识点3:MQEnvironment类 MQEnvironment类是IBM提供的类,用于设置MQ环境变量。该类提供了多个静态变量...
在C++中,可以使用标准模板库(STL)中的`queue`容器来实现FIFO,但自定义FIFO类可以提供更多的灵活性和特定的功能,比如对队列操作的记录、性能优化或特定类型的元素管理。 "fifo"这个文件可能是压缩包中的核心...