Ich habe einen einfachen Stack in C++ implementiert.
Wie würdet ihr die pop() bzw. top() Methode implementieren, speziell den Fall, wenn eine der Methoden aufgerufen wird obwohl der Stack leer ist?
Code: Alles auswählen
class Stack
{
  private:
  protected:
    int * const _begin;
    int * const _end;
    int * _current;
  public:
    Stack(unsigned int size);
    ~Stack();
    void push(int value);
    int pop();
    bool empty() const;
    int top() const;
    int const * begin() const;
    int const * end() const;
};
Code: Alles auswählen
#include "stack.hpp"
Stack::Stack(unsigned int size = 10)
  :
  _begin(new int[size]),
  _end(_begin + size - 1),
  _current(_begin - 1)
{}
Stack::~Stack()
{
  delete [] _begin;
}
void Stack::push(int value)
{
  if (_current < _end)
  {
    _current++;
    *_current = value;
  }
}
int Stack::pop()
{
  int value = 0;
  if (_current >= _begin)
  {
    value = *_current;
    _current--;
  }
  return value;
}
bool Stack::empty() const
{
  return (_current < _begin);
}
int Stack::top() const
{
  int value = 0;
  if (_current >= _begin)
  {
    value = *_current;
  }
  return value;
}
int const * Stack::begin() const
{
  return _begin;
}
int const * Stack::end() const
{
  return _end;
}
Laut einer anderen Meinung wäre hier jedoch das Werfen einer Exception (also bei top und pop) besser.
Was meint ihr?
LG
Daniel






