本文实例讲述了C++简单列表类的实现方法。分享给大家供大家参考。具体方法如下:
_AFXTLS.CPP文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
//#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文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
//#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++程序设计有所帮助。