一些常用的容器类模板构建——栈

基本概述

  • 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除操作,这一端被称为栈顶,相对地,另一端被称为栈底。
  • 向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
  • 栈是限定仅在表头进行插入和删除的线性表。栈是一种先进先出结构(FIFO)。

类模板与栈

首先说几个比较容易混淆的术语

1、函数指针——指针函数
函数指针的重点是指针,表示的是一个指向函数的指针,例如int (*pf)();指针函数的重点是函数,表示一个返回指针的函数,例如int* fun();
2、数组指针——指针数组
数组指针的重点是指针,表示一个指向数组的指针,例如int (*pa)[8];指针数组的重点是数组,表示一个由指针组成的数组,例如int* ap[8];
3、类模板——模板类
类模板的重点是模板,表示一个专门用于产生类的模板,例如

template<typename T>
class Vector
{...};

使用这个Vector模板就可以产生很多class(类),Vector<int>、Vector<char>、Vector<Vector<int> >、Vector<Shape*>......
模板类的重点是类,表示由一个模板生成而来的类,例如上面的Vector<int>、Vector<char>、......全是模板类。
4、函数模板——模板函数
函数模板的的重点是模板,表示一个专门用来生产函数的模板,例如

template<typename T>
void fun(T a)
{...};

在运用时,可以显式生产模板函数,fun<int>fun<double>fun<Shape *> ......,也可以在使用的过程中由编译器进行模板参数推导来隐式生成,例如fun(6);//隐式生成fun<int> fun(8.9);、fun('a');、Shape* ps = new Circle; fun(ps);
模板函数的重点是函数,表示的是由一个模板生成而来的函数,例如上面显式或隐式生成的fun<int>、fun<Shape*>......都是模板函数。
模板本身的使用是很受限制的,一般来说,它们就只是一个产生类和函数的模子。除此之外,运用的领域非常少了,所以不可能有什么模板指针存在的,即指向模板的指针,这是因为在C++中,模板就是一个代码的代码生产工具,在最终的代码中,根本就没有模板本身存在,只有模板具现出来的具体类和具体函数的代码存在。类模板还可以作为模板的模板参数使用。

模板的具体实现——如用来处理string对象的栈类—被称为实例化(instantiation)或具体化(specialization)。
template<class Type>
class Stack
{
private:
	enum{MAX=10};
	Type items[MAX];  //栈的大小固定
	int top;
public:
	Stack():top(0) {};
	bool isempty() {return top==0;}
	bool isfull() {return top==MAX;}
	bool push(const Type & item);
	bool pop(Type & item);
};
template<typename Type>
bool Stack<Type>::push(const Type & item)
{
	if (top < Max)
	{
		items[top++] = item;
		return true;
	}
	else
		return false;
}

template<typename Type>
bool Stack<Type>::pop(Type & item)
{
	if (top >0)
	{
		item = items[--top];
		return true;
	}
	else
		return false;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值