模板栈的实现

以下代码来自《C++编程思想》P410-模板介绍

#include<fstream>
#include<iostream>
#include<string>
using namespace std;

template<class T>
class Stack
{
private:
	struct Link
	{
		T* data;
		Link* next;
		Link(T* da,Link* ne):data(da),next(ne){}
	}* head;
public:
	Stack():head(NULL){}
	~Stack()
	{
		while(head)
		{
			delete pop();        //释放data数据;
		}
	}
	void push(T* da)
	{
		Link* he = new Link(da,head);
		head = he;
	}
	T* peek()
	{
		return head ? head->data : 0;
	}
	T* pop()
	{
		if(head == NULL) return 0;
		T* da = head->data;
		Link* he = head;
		head = head->next;
		delete he;
		return da;
	}
};

class X
{
public:
	virtual ~X(){}	//用于调用子类对象的析构
};

int main(int argc, char* argc[])
{
	if(argc == 1)return 0;
	ifstream in(argv[1]);	//主函数参数列表
	Stack<string> textlines;
	string line;
	while(getline(in, line))
	{
		textlines.push(new string(line));
	}
	string* s;
	for(int i = 0; i < 10; ++i)
	{
		if((s = textlines.pop()) == 0) break;
		cout << *s <<endl;
		delete s;
	}
	Stack<X> xx;
	for(int j = 0; j < 10; ++j)
	{
		xx.push(new X);  //new X() is also ok.
	}
}

  

时间: 2024-10-07 06:29:57

模板栈的实现的相关文章

模板栈的实现以及调用失败

场景说明:实现了了模板栈,但是调用的过程中,无法实现基本的功能: 声明如下: template<class T>struct SNode {     T t;     SNode<T>* pNextNode; }; template<class T> class CStack { private:     SNode<T>* m_pCStackTop;     int  m_nNodeCount; public:     CStack();     ~CSt

011 模板栈和队列

/* 目录: 一: 栈模板 1 类内编写 2 类外编写 二: 队列 1 类内编写 2 类外编写 */ 一: 栈模板 1 类内编写 // Stack.h #pragma once #include <iostream> template<typename DATA> class CStack { public: CStack() :m_nTop(-1) { } bool isFull() { if (m_nTop + 1 >= COUNT) { return true; } r

模板 - 栈

STL的栈,可能有一些不需要的信息. 其实用数组实现之后是这个鬼样子.感觉还不如直接用. struct Stack{ int st[MAXSIZE]; int top; inline void Clear(){ top=0; } inline void Push(int x){ st[++top]=x; } inline void Pop(){ --top; } inline int Top(){ return st[top]; } inline int Size(){ return top;

我的模板栈

1 template<typename T> 2 struct Node 3 { 4 T data; 5 Node<T>* next; 6 }; 7 8 template<typename T> 9 class stack 10 { 11 Node<T>* top; 12 public: 13 stack():top(NULL){} 14 void push(T n); 15 T pop(); 16 bool stackEmpty(); 17 T getTo

数据结构与算法系列研究二——栈和队列

栈和队列的相关问题分析 一.栈和队列定义 栈和队列是两种重要的数据结构.从结构特性角度看,栈和队列也是线性表,其特殊性在于它们的基本操作是线性表的子集,是操作受限的线性表,可称为限定性的数据结构:从数据类型角度看,其操作规则与线性表大不相同,是完全不同于线性表的抽象数据类型.                    图1 栈的结构                                                 图2 队列的结构   1.1.栈是限定在表的一端进行插入和删除操作的线性

栈_STACK的实现

栈_STACK 栈的基本操作 栈的代码实现 栈的C语言实现 栈的C实现 结论 本文中的完整代码你可以在这里: https://github.com/qeesung/algorithm/tree/master/chapter10/10-1/栈 或者这里: 顺序栈的实现:http://download.csdn.net/detail/ii1245712564/8744663 链式栈的实现:http://download.csdn.net/detail/ii1245712564/8744679 C语言

C++中template的简单用法

模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计.C++ 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream.使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数.返回值取得任意类型. 一.函数模板 在c++入门中,很多人会接触swap(int&, int&)这样的函数类似代码如下: 1 void swap(int&a , int& b) { 2 int temp

[转]C++ Template

引言 模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计.C++ 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream. 函数模板 在c++入门中,很多人会接触swap(int&, int&)这样的函数类似代码如下: void swap(int&a , int& b) { int temp = a; a = b; b = temp;} 但是如果是要支持long,string,自定义class的swap函数

C++ Template(转)

引言 模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计.C++ 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream. 函数模板 在c++入门中,很多人会接触swap(int&, int&)这样的函数类似代码如下: void swap(int&a , int& b) { int temp = a; a = b; b = temp;} 但是如果是要支持long,string,自定义class的swap函数