// 查找元素: 整个结构体,结构体某个元素
CList::Find
typedef struct SStud
{
    int nNumb;
    char szName[20];
    float fMath;
    bool operator==(const SStud& src) const
    {
        return (nNumb == src.nNumb)
            && (0 == strcmp(szName, src.szName))
            && (fMath == src.fMath);
    }
}DATA;
using namespace std;
int main(int argc, char *argv[], char **envp)
{
    CList<DATA, DATA&> myList;
    DATA d1 = { 1, "asd", 1.1 };
    DATA d2 = { 2, "222", 2.1 };
    DATA d3 = { 3, "333", 3.1 };
    myList.AddHead(d1);
    myList.AddHead(d2);
    myList.AddHead(d3);
    POSITION pos = myList.Find(d2);
    DATA d4 = myList.GetAt(pos);
    return 0;
}
 
 
/*
不变的流程可以通过固定的数据结构和算法构来处理数据,但具体的业务逻辑自己实现(没有通用)。
*/
 
 
// CList::Find源码
template<class TYPE, class ARG_TYPE>
POSITION CList<TYPE, ARG_TYPE>::Find(ARG_TYPE searchValue, POSITION startAfter) const
{
    ASSERT_VALID(this);
    CNode* pNode = (CNode*) startAfter;
    if (pNode == NULL)
    {
        pNode = m_pNodeHead;  // start at head
    }
    else
    {
        ASSERT(AfxIsValidAddress(pNode, sizeof(CNode)));
        pNode = pNode->pNext;  // start after the one specified
    }
    for (; pNode != NULL; pNode = pNode->pNext)
        if (CompareElements<TYPE>(&pNode->data, &searchValue))
            return (POSITION)pNode;
    return NULL;
}