Click here to Skip to main content
13,198,068 members (66,594 online)
Click here to Skip to main content
Add your own
alternative version


18 bookmarked
Posted 12 Oct 2000

CList Iterator

, 12 Oct 2000
Rate this:
Please Sign up or sign in to vote.
A simple iteration class for MFC's CList linked list.


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;

// add nodes to the list

pos = list.GetHeadPosition();
while (pos)
    int nElement;

    nElement = list.GetNext(pos);
    // do something with nElement

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 task immensly.

So using this class, the above code becomes

CList<int, int>      list;		// linked list
TLListIter<int, int> iter(list);	// linked list iterator
// add nodes to the list

while (iter)
    int nElement;

    nElement = iter++;
    // do something with nElement

Public Members


  • 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.


  • 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.


  • 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.


  • 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.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Craig Henderson
Technical Lead
United Kingdom United Kingdom
Craig graduated with a B.SC. Honours in Computing for Real Time Systems from the University of the West of England, Bristol in 1995 after completing an HND in Computing in 1993.

You may also be interested in...

Comments and Discussions

GeneralI'm translating the article Pin
julianico20-Dec-05 4:14
memberjulianico20-Dec-05 4:14 
GeneralMy diff List Pin
Anonymous30-Dec-03 22:25
sussAnonymous30-Dec-03 22:25 
GeneralMy diff List Pin
Anonymous30-Dec-03 22:23
sussAnonymous30-Dec-03 22:23 
GeneralIterator Pin
Andre Pham29-Dec-03 8:28
memberAndre Pham29-Dec-03 8:28 
RAyRAy26-May-02 15:34
memberRAyRAy26-May-02 15:34 
Generalcode source seems not ok Pin
Luc Vandal20-Nov-00 11:03
memberLuc Vandal20-Nov-00 11:03 
GeneralRe: code source seems not ok Pin
Craig Henderson1-Dec-00 4:19
memberCraig Henderson1-Dec-00 4:19 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.171020.1 | Last Updated 13 Oct 2000
Article Copyright 2000 by Craig Henderson
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid