1 #ifndef _LIST_H__
2 #define _LIST_H__
3 #include<stdlib.h>
4 template<class Type> class List;
5
6
7 template<class Type>
8 class Link
9 {
10 friend class List<Type>;
11
12 private:
13 Type m_Data;
14 Link<Type>* m_Next;
15 Link<Type>* m_Pre;
16 Link(const Type& Val, Link<Type>* Next, Link<Type>* Pre);
17
18 };
19
20 template<class Type>
21 Link<Type>::Link(const Type& Val, Link<Type>* Next, Link<Type>* Pre):m_Data(Val), m_Next(Next),m_Pre(Pre)
22 {
23
24 }
25
26 template <class Type>
27 class List
28 {
29 public:
30 class Iterator
31 {
32 private:
33 List<Type>* m_pList;
34 Link<Type>* m_pLink;
35 public:
36 Iterator( List<Type>* pList, Link<Type>* pLink):m_pList(pList), m_pLink(pLink)
37 {
38
39 }
40 Iterator():m_pList(NULL), m_pLink(NULL)
41 {
42
43 }
44
45 Type& operator*()
46 {
47 return (m_pLink->m_Data);
48 }
49
50 Type* operator->()
51 {
52 return &(m_pLink->m_Data);
53 }
54
55 Iterator& operator++()
56 {
57 if(m_pLink->m_Next != NULL)
58 {
59 m_pLink = m_pLink->m_Next;
60 }
61 else
62 {
63 m_pLink = NULL;
64 }
65 return *this;
66 }
67
68 Iterator operator++(int)
69 {
70 Iterator tmp = *this;
71 ++ *this;
72 return tmp;
73 }
74
75 bool operator==(Iterator iter)
76 {
77 return (m_pList == iter.m_pList && m_pLink == iter.m_pLink);
78 }
79
80 bool operator!=(Iterator iter)
81 {
82 return (m_pList != iter.m_pList || m_pLink != iter.m_pLink);
83 }
84 };
85 private:
86 Link<Type>* m_stHead;
87 int n_element;
88 Link<Type>* m_stTail;
89 public:
90 List():m_stHead(NULL),m_stTail(NULL),n_element(0)
91 {
92
93 }
94 ~List()
95 {
96
97 }
98
99 Iterator begin()
100 {
101 return Iterator(this, m_stHead);
102 }
103
104 Iterator end()
105 {
106 return Iterator(this, NULL);
107 }
108
109 int push_back(const Type& stData)
110 {
111 //检查是否是第一个元素
112 if(NULL == m_stHead)
113 {
114 Link<Type>* pLink = new Link<Type>(stData, NULL, NULL);
115 m_stHead = pLink;
116 m_stTail = pLink;
117 }
118 else
119 {
120 //不是最后一个元素
121 Link<Type>* pLink = new Link<Type>(stData, NULL, m_stTail);
122 m_stTail->m_Next = pLink;
123 m_stTail = pLink;
124 }
125 n_element ++;
126 return 0;
127 }
128
129 };
130 #endif
#include "List.h"
#include <stdio.h>
int main()
{
List<int> IList;
IList.push_back(5);
IList.push_back(6);
IList.push_back(7);
List<int>::Iterator iter ;
for(iter = IList.begin(); iter != IList.end(); iter ++ )
{
printf("%d
", *iter);
}
return 0;
}