首页 > 编程 > C++ > 正文

C++中CSimpleList的实现与测试实例

2020-01-26 15:14:58
字体:
来源:转载
供稿:网友

本文实例讲述了C++简单列表类的实现方法。分享给大家供大家参考。具体方法如下:

_AFXTLS.CPP文件如下:

//#include "StdAfx.h #include <stddef.h> #include <stdio.h> #include "_AFXTLS_.H"  struct MyThreadData{   MyThreadData* pNext;   int nShortData; };  void CSimpleList::AddHead(void *p) {   *GetNextPtr(p)=m_pHead;   m_pHead = p; }  BOOL CSimpleList::Remove(void* p) {   BOOL bRet = FALSE;   if (p == NULL)   {     bRet = FALSE;   }    if (p == m_pHead)   {     m_pHead = GetNext(m_pHead);     bRet = TRUE;   }   else   {     void*  pTest;     pTest = m_pHead;     while (pTest && (GetNext(pTest) != p))     {       pTest = GetNext(pTest);     }     if (pTest != NULL)     {       *GetNextPtr(pTest) = GetNext(p);       bRet = TRUE;     }   }   return bRet;  }  void main() {   MyThreadData* pData;   CSimpleList list;   list.Construct(offsetof(MyThreadData, pNext));   for (int i=0;i<10;i++)   {     pData = new MyThreadData;     pData->nShortData = i;     list.AddHead(pData);   }    //遍历链表,释放MyThreadData对象占用的空间   pData = (MyThreadData*)list.GetHead();   while(pData != NULL)   {     MyThreadData* pNextData = pData->pNext;     printf("The value is %d/n",pData->nShortData);     delete pData;     pData = pNextData;   } } 

_AFXTLS_.H文件如下:

//#include "StdAfx.h #ifndef __AFXTLS_H__ #define __AFXTLS_H__ #include <Windows.h> class CSimpleList { public:   CSimpleList(int nNextOffset=0);   void Construct(int nNextOffset);   //接口   BOOL IsEmpty() const;   void AddHead(void *p);   void RemoveAll();   void* GetHead() const;   void* GetNext(void* preElement) const;   BOOL Remove(void* p);    //为实现接口所需的成员   void  *m_pHead;   size_t m_nextOffset;   void** GetNextPtr(void* preElement) const; };  //类的内联函数 inline CSimpleList::CSimpleList(int nNextOffset)   {m_pHead = NULL; m_nextOffset = nNextOffset;  }  inline void CSimpleList::Construct(int nNextOffset)   {m_nextOffset = nNextOffset;  }  inline BOOL CSimpleList::IsEmpty() const {   return m_pHead==NULL; } //inline void AddHead(void *p) //{ // //} inline void CSimpleList::RemoveAll() {   m_pHead = NULL; } inline void* CSimpleList::GetHead() const {   return m_pHead; } inline void* CSimpleList::GetNext(void* preElement) const {   return *GetNextPtr(preElement); } //inline BOOL CSimpleList::Remove(void* p) //{ // //} inline void**  CSimpleList::GetNextPtr(void* preElement) const {   return (void**)((BYTE*)preElement+m_nextOffset); }   #endif

希望本文所述对大家的C++程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表