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