简单实现一个c++的例子,
头文件stack.h
const int maxStack = 16; class IStack { public: IStack() : _top(0){} void Push(int i); int Pop(); private: int _arr [maxStack]; int _top; };
#include "stack.h" #include <cassert> #include <iostream> void IStack::Push(int i) { assert(_top < maxStack); _arr[_top] = i; ++_top; } int IStack::Pop() { assert(_top > 0 ); --_top; return _arr [_top]; } int main() { IStack stack; stack.Push(1); stack.Push(2); std::cout << " Popped " << stack.Pop() << std :: endl; std::cout << " Popped " << stack.Pop() << std :: endl; }
makefile 文件
objects = stack.o
edit:$(objects)
g++ -o edit $(objects)
stack.o:stack.cpp stack.h
cc -c stack.cpp
clean :
rm edit $(objects)
----------------------------------------------------------------------------
#include "Istack.h" #include <cassert> #include <iostream> StackSeq::StackSeq(Istack const & stack) : _iCur(0), _stack(stack) {} bool StackSeq::AtEnd() const { return _iCur == _stack._top; } int Istack::Pop() { assert(_top > 0 ); --_top; return _arr [_top]; } void Istack::Push(int i) { assert(_top < maxStack); _arr[_top] = i; ++_top; } void StackSeq :: Advance() { assert(!AtEnd()); ++_iCur; } int StackSeq :: GetNum() const { assert(!AtEnd()); return _stack._arr[_iCur]; } int main() { Istack TheStack; TheStack.Push(1); TheStack.Push(2); TheStack.Push(3); for(StackSeq seq(TheStack); !seq.AtEnd(); seq.Advance()) { std::cout << " " << seq.GetNum() << std :: endl; } }
const int maxStack = 16; class Istack { friend class StackSeq; public: Istack():_top(0){} void Push (int i); int Pop(); private: int _arr[maxStack]; int _top; }; class StackSeq { public: StackSeq(Istack const & stack); bool AtEnd() const; void Advance(); int GetNum() const; private: Istack const & _stack; int _iCur; };objects = Istack.o