Stack4.h
/**
* 书本:【ThinkingInC++】
* 功能:带内联函数的Stack
* 时间:2014年9月16日19:04:01
*/
#ifndef STACK4_H_INCLUDED
#define STACK4_H_INCLUDED
#include "../require.h"
class Stack
{
struct Link //节点结构
{
void* data; //数据用空指针,为了后面方便存储各种数据都可以转化
Link* next; //指向下一个节点
Link(void* dat, Link* nxt) : data(dat), next(nxt) {}
}*head;
public:
Stack() : head(0) {} //初始化指针为0
~Stack() {require(head == 0, "Stack not empty");}
void push(void* dat) {head=new Link(dat, head);} //压入数据,吧新的数据压入链表的头部,尾部节点为0,作为尾节点的判定
void* peek() const {return head ? head->data : 0;} //返回栈顶元素,但是不弹出栈顶元素
void* pop() //弹出栈顶元素并且删除栈顶元素
{
if(head == 0) return 0;
void* result=head->data;
Link* oldHead=head;
head=head->next;
delete oldHead;
return result;
}
};
#endif // STACK4_H_INCLUDED
Stack4Test.cpp
/**
* 书本:【ThinkingInC++】
* 功能:带内联函数的Stack
* 时间:2014年9月16日19:04:49
*/
#include "Stack4.h"
#include "../require.h"
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
ifstream in("Stack4Test.cpp");
assure(in, "Stack4Test.cpp");
Stack textlines;
string line;
//读入文件
while(getline(in, line))
textlines.push(new string(line)); //压入数据,new返回的是空间的头指针
//输出这个文件
string* s;
while((s=(string*)textlines.pop()) != 0)
{
cout<<*s<<endl;
delete s;
}
return 0;
}