C++中CSimpleList的实现与测试实例
2014-10-11 08:58
881 查看
本文实例讲述了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++程序设计有所帮助。
您可能感兴趣的文章:
相关文章推荐
- nginx实现网站负载均衡测试实例(windows下IIS做负载实测)
- 实现 OGRE嵌入到QT中的测试程序,并支持多实例
- 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n
- windows使用nginx实现网站负载均衡测试实例
- windows使用nginx实现网站负载均衡测试实例
- 在C#中实现I/O完成端口(包括类定义和测试实例)
- JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
- php实现有趣的人品测试程序实例
- windows使用nginx实现网站负载均衡测试实例
- Jenkins+ant_实现Jmeter脚本持续集成测试实例
- windows使用nginx实现网站负载均衡测试实例
- 【转载】windows使用nginx实现网站负载均衡测试实例
- windows使用nginx实现网站负载均衡测试实例
- php实现有趣的人品测试程序实例
- windows使用nginx实现网站负载均衡测试实例
- 实现 OGRE嵌入到QT中的测试程序,并支持多实例
- windows使用nginx实现网站负载均衡测试实例
- nginx实现网站负载均衡测试实例(windows下IIS做负载实测)(转)
- windows使用nginx实现网站负载均衡测试实例
- 使用spring实现邮件的发送实例(含测试,源码,注释)