Cursor iteration can be done with a for loop. Consider the following example:
//main.cpp - main file #include <iset.h> #include <iostream.h> #include "person.h" //person.h from the previous examples typedef ISet <Person> AddressList; ostream& operator<<(ostream& os,Person A) { return (os << endl << A.GetPersonName() << " " << A.GetTNumber()); } void main() { AddressList Business; AddressList::Cursor myCursor(Business); Person A("Peter Black","714-50706"); Person B("Carl Render","714-540321"); Person C("Sandra Summers","x"); Person D("Mike Summers","x"); Person E; Business.add(A); Business.add(B); Business.add(C); Business.add(D); //List of all elements in the set for (myCursor.setToFirst(); myCursor.isValid(); myCursor.setToNext()) { cout << Business.elementAt(myCursor); } }
AddressList::Cursor is the Cursor class that is nested within the class AddressList. Its constructor takes a Business object as an argument. The name of the cursor object in the example above is myCursor.
The Collection Classes define a macro forICursor that lets you write a cursor iteration even more elegantly:
#define forICursor(c) \ for ((c).setToFirst(); \ (c).isValid(); \ (c).setToNext())
Use it like this:
forICursor(myCursor) { cout << Business.elementAt(myCursor); }
If the element is used read-only, a function of the cursor can be used instead of elementAt(myCursor):
forICursor(myCursor) { cout << myCursor.element(); //myCursor is associated to Business }
The function element above is a function of the Cursor class. It returns a const reference to the element currently pointed at by the cursor. The element returned might therefore not be modified. Otherwise it would be possible to manipulate a constant collection by using cursors.
Note: To remove multiple elements from a collection, use the removeAll function with a predicate function as an argument. Using cursor iteration to identify the elements to remove causes the first element removed to invalidate the cursor.
Introduction
to the Collection Classes
Collection Characteristics
Overview
of Iteration
Iteration
with Cursors
Adding an Element to a
Collection
Removing an Element from
a Collection
Using Cursors to
Locate and Access Elements
Using allElementsDo and
Applicators to Iterate Over a Collection
Cursors vs. Exception
Handling
Instantiating the
Collection Classes
Troubleshooting
Problems while Using the Collection Class Library