// Listing 1 - Sample Iterator Implementation
#include <iostream.h>
#include <list.h>
template<class T> class C {
list<T> c;
public:
class I { // iterator class
friend class C<T>;
typedef list<T>::iterator LI;
typedef list<T>::const_iterator cLI;
typedef const void * const_void;
const C<T> *pC;// container pointer
cLI i;
size_t n;
public:
I() : pC(0), n(0) { }
I(const C<T>* p_, cLI i_) : pC(p_), i(i_), n(0) { }
I(const I& i_) : pC(i_.pC), i(i_.i), n(i_.n) { }
I& operator++() {
if (pC)
if (++n < pC->c.size())
++i;
else
pC = 0;
return *this;
}
operator const void*() {return pC;}
T& operator*() { return (T&)(*i); }
};
I begin() { return I(this,c.begin()); }
I end() { return I(); }
void push_back(const T& x) { c.push_back(x); return; }
friend class I;
};
using namespace std;
int main( void ) {
C<int> myC;
for (int i=0; i<5; ++i)
myC.push_back(i);
C<int>::I i = myC.begin();
for (; i != myC.end(); ++i)
cout << *i << " ";
cout << endl;
return 0;
}