Starting out

How to begin
Get the book


Tutorials

C tutorial
C++ tutorial
Game programming
Graphics programming
Algorithms
More tutorials


Practice

Practice problems
Quizzes


Resources

Source code
C and C++ tips
Getting a compiler
Book recommendations
Forum


References

Function reference
Syntax reference
Programming FAQ



Stack Source Code in C++

Special thanks to Eric Suh for contributing the following implementation of a stack. This implementation uses templates to faciliate generic programming.
/*
 -------------------------------------------------------------------
 | |
 | Stack Class |
 | =========================================================== |
 | This Stack has been implemented with templates to allow it |
 | to accomodate virtually any data type, and the size of the |
 | Stack is determined dynamically at runtime. |
 | |
 | There is also a new function: peek(), which, given a whole |
 | number 'Depth', returns the Stack element which is 'Depth' |
 | levels from the top. |
 | |
 -------------------------------------------------------------------
*/
#ifndef __StackClassH__
#define __StackClassH__
#include <assert.h> // For error-checking purposes
//-------------------------------------------------
// Main structure of Stack Class:
//-------------------------------------------------
template <class Elem>
class Stack
{
 public:
 Stack(int MaxSize=500);
 Stack(const Stack<Elem> &OtherStack);
 ~Stack(void);
 inline void Push(const Elem &Item); // Adds Item to the top
 inline Elem Pop(void); // Returns Item from the top
 inline const Elem &Peek(int Depth) const; // Peek a depth downwards
 protected:
 Elem *Data; // The actual Data array
 int CurrElemNum; // The current number of elements
 const int MAX_NUM; // Maximum number of elements
};
//-------------------------------------------------
// Implementation of Stack Class:
//-------------------------------------------------
// Stack Constructor function
template <class Elem>
Stack<Elem>::Stack(int MaxSize) :
 MAX_NUM( MaxSize ) // Initialize the constant
{
 Data = new Elem[MAX_NUM];
 CurrElemNum = 0;
}
// Stack Destructor function
template <class Elem>
Stack<Elem>::~Stack(void)
{
 delete[] Data;
}
// Push() function
template <class Elem>
inline void Stack<Elem>::Push(const Elem &Item)
{
 // Error Check: Make sure we aren't exceeding the maximum storage space
 assert(CurrElemNum < MAX_NUM);
 
 Data[CurrElemNum++] = Item;
}
// Pop() function
template <class Elem>
inline Elem Stack<Elem>::Pop(void)
{
 // Error Check: Make sure we aren't popping from an empty Stack
 assert(CurrElemNum > 0);
 return Data[--CurrElemNum];
}
// Peek() function
template <class Elem>
inline const Elem &Stack<Elem>::Peek(int Depth) const
{
 // Error Check: Make sure the depth doesn't exceed the number of elements
 assert(Depth < CurrElemNum);
 return Data[ CurrElemNum - (Depth + 1) ];
}
#endif /*__StackClassH__*/
Advertising | Privacy policy | Copyright © 2019 Cprogramming.com | Contact | About


AltStyle によって変換されたページ (->オリジナル) /