⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tstack.h

📁 Think in C++ 2nd
💻 H
字号:
//: C16:TStack.h

// From Thinking in C++, 2nd Edition

// Available at http://www.BruceEckel.com

// (c) Bruce Eckel 1999

// Copyright notice in Copyright.txt

// Stack using templates

#ifndef TSTACK_H

#define TSTACK_H



// Declaration required:

template<class T> class TStackIterator;



template<class T> class TStack {

  struct Link {

    T* data;

    Link* next;

    Link(T* dat, Link* nxt) {

      data = dat;

      next = nxt;

    }

  }* head;

  int _owns;

public:

  TStack(int own = 1) : head(0), _owns(own) {}

  ~TStack();

  void push(T* dat) {

    head = new Link(dat,head);

  }

  T* peek() const { return head->data; }

  T* pop();

  int owns() const { return _owns; }

  void owns(int newownership) {

    _owns = newownership;

  }

  friend class TStackIterator<T>;

};



template<class T> T* TStack<T>::pop() {

  if(head == 0) return 0;

  T* result = head->data;

  Link* oldHead = head;

  head = head->next;

  delete oldHead;

  return result;

}



template<class T> TStack<T>::~TStack() {

  Link* cursor = head;

  while(head) {

    cursor = cursor->next;

    // Conditional cleanup of data:

    if(_owns) delete head->data;

    delete head;

    head = cursor;

  }

}



template<class T> class TStackIterator {

  TStack<T>::Link* p;

public:

  TStackIterator(const TStack<T>& tl)

    : p(tl.head) {}

  TStackIterator(const TStackIterator& tl)

    : p(tl.p) {}

  // operator++ returns boolean indicating end:

  int operator++() {

    if(p->next)

      p = p->next;

    else p = 0; // Indicates end of list

    return int(p);

  }

  int operator++(int) { return operator++(); }

  // Smart pointer:

  T* operator->() const {

    if(!p) return 0;

    return p->data;

  }

  T* current() const {

    if(!p) return 0;

    return p->data;

  }

  // int conversion for conditional test:

  operator int() const { return p ? 1 : 0; }

};

#endif // TSTACK_H ///:~

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -