Defining Deque<>
template <typename T>
class Deque
{
public:
// scope Deque<T>:: type definitions
typedef T ValueType;
typedef DequeIterator<T> Iterator;
// constructors - specify size and an initial value
Deque ();
Deque (size_t, const T&);
Deque (const Deque<T>&);
// destructor
virtual ~Deque();
// member operators
Deque<T>& operator = (const Deque<T>&);
T& operator [] (size_t);
const T& operator [] (size_t) const;
// Container class protocol
bool Empty () const;
size_t Size () const;
bool PushFront (const T&);
bool PopFront ();
bool PushBack (const T&);
bool PopBack ();
void Clear ();
T& Front ();
const T& Front () const;
T& Back ();
const T& Back () const;
// Iterator support
friend class DequeIterator<T>;
Iterator Begin ();
Iterator End ();
Iterator rBegin ();
Iterator rEnd ();
// Generic display methods
void Display (std::ostream& os, char ofc = '\0') const;
void Dump (std::ostream& os) const;
protected:
// classic circular array implementation
T* content_;
size_t contentSize_, beg_, end_;
} ;
// operator overloads (friend status not required)
template < class T >
std::ostream& operator << (std::ostream& os, const Deque<T>& a);
template < class T >
bool operator == (const Deque<T>&, const Deque<T>&);
template < class T >
bool operator != (const Deque<T>&, const Deque<T>&);