123 template <
typename T>
151 typedef IBaseIterator<A>
self;
152 typedef self& self_reference;
153 typedef const self_reference const_self_reference;
155 virtual bool operator==(const_self_reference rhs) = 0;
158 virtual self_reference operator++() = 0;
161 virtual self_reference operator++(
int) = 0;
164 virtual A* operator->() = 0;
166 inline bool operator!=(const_self_reference rhs){
return !((*this) == rhs); }
179 class IIterator:
public IBaseIterator<A>
182 typedef IIterator<A>
self;
183 typedef self& self_reference;
184 typedef const self_reference const_self_reference;
186 IIterator(){ void_constructor(); }
188 IIterator(const_self_reference itr) { copy_constructor(itr); }
190 virtual self_reference operator=(const_self_reference other) = 0;
193 virtual void void_constructor() = 0;
194 virtual void copy_constructor(const_self_reference itr) = 0;
209 typedef T value_type;
210 typedef value_type& reference;
211 typedef const value_type& const_reference;
214 virtual bool empty()
const = 0;
216 typedef IIterator<reference> iterator;
217 virtual iterator begin() = 0;
218 virtual iterator end() = 0;
220 typedef IIterator<const_reference> const_iterator;
221 virtual const_iterator begin()
const = 0;
222 virtual const_iterator end()
const = 0;