『代码』··By/蜜汁炒酸奶

函数模板之名为List的类模板—C++

/*
功能:编写一个名为List的类模板
作者:WindCoder
日期:2013-12-12
*/
#include <iostream>
using namespace std;
template <class T>
class List
{
public:
	List();
	~List();
	bool Add(T a);
	void Clear();
	void Display ();
	bool Del(int num);
	bool Addone(T a,int pos);
	bool Find(T a);
private:
     int aSize;
     T   *m_aData;
};
//构造函数
template <class T>
List<T>::List()
{
	aSize = 0;
	m_aData=NULL;
}
//析构函数
template <class T>
List<T>::~List()
{
	delete m_aData;
}
/************************************************************************
函数名:Add(T a)
功能:插入元素至末尾
参数:a 要插入的元素
返回值:true成功,false失败
************************************************************************/
template <class T>
bool List<T>::Add(T a)
{
	T *p;
	p= new T[aSize+1];
	if (!p)
	{
		return false;
	}
	for (int i=0;i<aSize;i++)
	{
		p[i]=m_aData[i];
	}
	p[aSize] = a;
	delete m_aData;
	m_aData = p;
	aSize++;
	return true;

}
/************************************************************************
函数名:Clear();
功能:清空
参数:无
返回值:无
************************************************************************/
template <class T>
void List<T>::Clear()
{
	delete m_aData;
	m_aData = NULL;
	aSize = 0;
}
/************************************************************************
函数名:Display ()
功能:遍历
参数:无
返回值:无
************************************************************************/
template <class T>
void List<T>::Display ()
{
	for(int i=0;i<aSize;i++)
	{
		cout<<m_aData[i]<<" ";
	}


}
/************************************************************************
函数名:Del(int pos)
功能:删除
参数:int pos 要删除的元素所在位置(从0开始)
返回值:true成功,false失败
************************************************************************/
template <class T>
bool List<T>::Del(int pos)
{
	int i=0;
	if (pos<0||pos>=aSize)
	{
		return false;
	}
	T *p;
	p = new T[aSize-1];
	for (;i<pos;i++)
	{
		p[i] = m_aData[i];
	}
	for(i=pos+1;i<aSize;i++)
	{
		p[i-1]=m_aData[i];
	}
	delete m_aData;
	m_aData = p;
	aSize--;
	return true;


}
/************************************************************************
函数名:Addone(T a,int pos);
功能:在特定位置插入元素
参数:T a 要插入的值
      int pos 要插入的位置
返回值:true成功,false失败
************************************************************************/
template <class T>
bool List<T>::Addone(T a,int pos)
{
	int i=0;
	if (pos<0||pos>aSize)
	{
		return false;
	}
	T *p;
	p = new T[aSize+1];
	aSize++;
	for (;i<pos;i++)
	{
		p[i] = m_aData[i];
	}
	p[pos]=a;
	for(i=pos+1;i<aSize;i++)
	{
		p[i+1]=m_aData[i];
	}
	delete m_aData;
	m_aData = p;
	return true;

}
/************************************************************************
函数名:Find(T a);
功能:查找指定元素
参数:T a 待查找元素
返回值:true存在,false不存在
************************************************************************/
template <class T>
bool List<T>:: Find(T a)
{
	for (int i=0;i<aSize;i++)
	{
		if (a==m_aData[i])
		{
			return true;
		}
	}
	return false;

}
int main(void)
{
	int i;
    List<int>list;
	list.Add(1);
	list.Add(5);
	list.Add(13);
    list.Display();
	cout<<endl;

	list.Del(0);
	list.Display();
	cout<<endl;

	list.Addone(8,2);
	list.Display();
	cout<<endl;
    i=list.Find(4);
	if (i)
	{
		cout<<"元素存在"<<endl;
	}
	else
	{
        cout<<"元素不存在"<<endl;
	}

	system("pause");
	return 0;
}
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203

预览
Loading comments...
0 条评论

暂无数据

example
预览