Download
source files - 1 Kb
Introduction
MFC's
CList
provides a template
linked list implementation and works perfectly
adequately. However, iterating
through the list
can be a little combersome. Code like that below is
common place for processing list elements, but the POSITION
variable is meaningless and confusing as it always
points to the next node rather than the current
one.
POSITION pos;
CList<int, int> list;
pos = list.GetHeadPosition();
while (pos)
{
int nElement;
nElement = list.GetNext(pos);
}
TLListIter class
The iterator
class I present here simplifies the use slightly,
making the code easier to read and maintain. It
originates from a larger project I wrote where I have
a list of objects
of type A
, each with their own list of
objects of type B
, and I needed to
iterate all objects of type B
in the
system. This class simplified the tucancode.net immensly.
So using this class,
the above code becomes
CList<int, int> list;
TLListIter<int, int> iter(list);
iter.begin();
while (iter)
{
int nElement;
nElement = iter++;
}
Public Members
Construction/Destruction
TLListIter(TLList<TYPE,
ARG_TYPE> &__list);
Constructor to initialise the iterator
with the the linked list to be iterated.
TLListIter(TLListIter<TYPE,
ARG_TYPE> &__iter);
Copy constructor to create a new iterator
for the same linked list with the same node position.
virtual
~TLListIter();
Virtual class destructor.
Operators
operator
bool ();
Boolean operator will return true if there is a current
node, or false if not.
operator
ARG_TYPE ();
Linked List argument
operator will returns the element at the current node.
Navigation
TLListIter<TYPE,
ARG_TYPE> operator++(int);
Post increment operator returns the current node and
moves the internal position to the next node.
TLListIter<TYPE,
ARG_TYPE> operator--(int);
Post decrement operator returns the current node and
moves the internal position to the previous node.
// these functions will
return false if there are no elements in the list
bool
begin(void);
Moves to the first node in the list.
This function returns false
if the linked list is empty.
bool
end(void);
Moves to the last node in the list.
This function returns false
if the linked list is empty.
MFC
Compatibilty
POSITION
GetPosition(void) const;
Returns the internal POSITION
variable.
Limitations
- As the class stands,
it cannot be used to process a list
of
bool
.
This is because of the operator
bool()
used
to determine the end of the list.
- For some reason
unknown to me (please let me know any solutions) a
compiler error is generated if the class is used
while
(nNumber == 7
&& iter)
. Instead, this must be coded
while (nNumber
== 7 &&
iter == true)
and then all is fine. Wierd.