In our case, we can add a public iterator class into the
BArray
class:
class iterator { BArray *array; unsigned pos; public: iterator(BArray &who, unsigned pos); iterator(void); bool operator == (const iterator &v); Lv operator *(void); void operator ++(int); };
The methods are implemented as follows:
The constructor is just an initializer:
BArray::iterator(BArray &who, unsigned p):array(&who),pos(p) { } BArray::iterator(void) { }
The equality operator checks to make sure the array and position are both the same:
bool BArray::iterator::operator == (const BArray::iterator &v) { return (array == v.array) && (pos == v.pos); }
The dereference operator returns the value of a position in the array:
BArray::Lv BArray::iterator::operator *(void) { return Lv(*array, pos); }
The increment operator increments the iterator position.
void BArray::iterator::operator ++(int) { pos++; }
We also need to add a few iterator creation methods in BArray
:
BArray::iterator BArray::begin(void) { return iterator(*this, 0); } BArray::iterator BArray:end(void) { return iterator(*this, size); }
With these definitions, we can now write a loop to iterate through a
BArray
as follows:
{ BArray ba[20]; BArray::iterator i; for (i = ba.begin(); i != ba.end(); i++) { cout << *i << endl; } }