002 CList::Find 查找结构体

 

 

// 查找元素: 整个结构体,结构体某个元素
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;
}

 

posted @ 2019-09-30 17:41  火焰马  阅读(787)  评论(0)    收藏  举报