| | | | | |

Defining DequeIterator<>

template <typename T>
class DequeIterator
{
friend class Deque<T>;

public:
  // terminology support
  typedef T                ValueType;
  typedef DequeIterator<T> Iterator;

  // constructors
  DequeIterator      ();
  DequeIterator      (const Deque<T>& Q);
  DequeIterator      (const Iterator& I);

  // information/access
  T&   Retrieve        () const; // Return ptr to current Tval
  bool Valid           () const; // cursor is valid element

  // Initializers
  void  Initialize    (const Deque<T>& Q);
  void  rInitialize   (const Deque<T>& Q);

  // various operators
  bool      operator == (const Iterator& I2) const;
  bool      operator != (const Iterator& I2) const;
  T&        operator *  () const; // Return reference to current Tval
  T&        operator [] (size_t i) const; // Return reference to Tval at index i
  Iterator& operator =  (const Iterator & I);
  Iterator& operator ++ ();    // prefix
  Iterator  operator ++ (int); // postfix
  Iterator& operator -- ();    // prefix
  Iterator  operator -- (int); // postfix

  // "pointer" arithmetic

  long      operator -  (const Iterator & I2) const;

  // these are the new template pointer arithmetic operators

  template <typename N>
  Iterator& operator += (N n);

  template <typename N>
  Iterator& operator -= (N n);

  template <typename N>
  Iterator  operator +  (N n) const;

protected:
  const Deque<T>* dequePtr_;
  size_t indexBase_;
} ;

| | Top of Page | 4. Generic Positional Containers and Double Ended Queues - 7 of 10