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_;
} ;