Click here to Skip to main content
15,886,199 members
Articles / Desktop Programming / MFC

Quick and Dirty Collection Class Notes

Rate me:
Please Sign up or sign in to vote.
4.11/5 (10 votes)
28 Nov 2000 96.9K   1K   33  
An article describing MFC Collection Classes
Expand the Header Files folder, and open file StdAfx.h.
At the end of the file, type:
#include <afxtempl.h>    // MFC templates

///////////////////////////////////////////////////////////////////////////////
CTypedPtrList < class BASE_CLASS, class TYPE >

    BASE_CLASS  Base class of the typed pointer list class;
                must be a pointer list class (CObList or CPtrList).

    TYPE        Type of the elements stored in the base-class list.

    The CTypedPtrList class provides a type-safe �wrapper� for objects of class
    CPtrList. When you use CTypedPtrList rather than CObList or CPtrList, the
    C++ type-checking facility helps eliminate errors caused by mismatched
    pointer types.

    In addition, the CTypedPtrList wrapper performs much of the casting that
    would be required if you used CObList or CPtrList.

    ==================================================
    Class Members
    ==================================================
    AddHead
        POSITION AddHead( TYPE newElement );
        void AddHead( CTypedPtrList<BASE_CLASS, TYPE> *pNewList );
    AddTail
        POSITION AddTail( TYPE newElement );
        void AddTail( CTypedPtrList<BASE_CLASS, TYPE> *pNewList );
    GetAt
        TYPE& GetAt( POSITION position );
        TYPE GetAt( POSITION position ) const;
    GetHead
        TYPE& GetHead( );
        TYPE GetHead( ) const;
    GetNext
        TYPE& GetNext( POSITION& rPosition );
        TYPE GetNext( POSITION& rPosition ) const;
    GetPrev
        TYPE& GetPrev(POSITION& rPosition );
        TYPE GetPrev( POSITION& rPosition ) const;
    GetTail
        TYPE& GetTail( );
        TYPE GetTail( ) const;
    RemoveHead
        TYPE RemoveHead( );
    RemoveTail
        TYPE RemoveTail( );
    SetAt
        void SetAt( POSITION pos, TYPE newElement );

    ==================================================
    Create
    ==================================================
    typedef CTypedPtrList<CPtrList, CMyStruct*> CMyStructList;
    CMyStructList m_myPtrList;

    typedef CTypedPtrList<CObList, CMyObject*>  CMyObList;
    CMyObList m_myObList;

    ==================================================
    Insert
    ==================================================
    CMyStruct* pMyStruct = new CMyStruct();
	pMyStruct->m_int = 1234;
	pMyStruct->m_float = 12.34f;
	pMyStruct->m_str.LoadString(IDS_INITIAL_STRING);
    m_myPtrList.AddTail(pMyStruct);

    m_myPtrList.InsertBefore(pos, pMyStruct);

    CMyObject* pMyObject = new CMyObject();
    m_myObList.AddTail(pMyObject);

    ==================================================
    Iterate
    ==================================================
    POSITION pos = m_myPtrList.GetHeadPosition();
    while( pos != NULL )
    {
        CMyStruct* pMyStruct = m_myPtrList.GetNext( pos );
    }

    ==================================================
    Find
    ==================================================
    pos = m_myPtrList.Find(pMyStruct);

    ==================================================
    Update
    ==================================================
    m_myPtrList.SetAt(pos, pMyStruct);

    ==================================================
    Delete
    ==================================================
    m_myPtrList.RemoveAt(pos);

    POSITION pos = m_myPtrList.GetHeadPosition();
	while (pos != NULL)
	{
        delete m_myPtrList.GetNext(pos);
	}
    m_myPtrList.RemoveAll();

    while (!m_myObList.IsEmpty())
    {
        delete m_myObList.GetHead();
        m_myObList.RemoveHead();
    }

    ==================================================
    Serialize
    ==================================================
    nCount = (WORD)m_myPtrList.GetCount();
    if (ar.IsStoring())
	{
        ar << nCount;
        pos = m_myPtrList.GetHeadPosition();
		while (pos != NULL)
		{
            CMyStruct* pMyStruct = m_myPtrList.GetNext(pos);
			w = (WORD)pMyStruct->m_int;
			ar << w;
			ar << pMyStruct->m_float;
			ar << pMyStruct->m_str;
			nCount--;
		}
		ASSERT(nCount == 0);
	}
	else
	{
		ar >> nCount;
		while (nCount-- > 0)
		{
			CMyStruct* pMyStruct = new CMyStruct;
			ar >> w;
			pMyStruct->m_int = w;
			ar >> pMyStruct->m_float;
			ar >> pMyStruct->m_str;
            m_myPtrList.AddTail(pMyStruct);
		}
	}

    m_myObList.Serialize(ar);
    // Note: CMyObject serializes itself
    void CMyObject::Serialize(CArchive& ar)
    {
        CObject::Serialize( ar );
        if( ar.IsStoring() )
            ar << i;
        else
            ar >> i;
    }


By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions