模板类,实现一个简单的单链表
#include <iostream>
#include <stdlib.h>
using namespace std;
template <typename type>
class List;
template <typename type>
class note//此后这个类的类型就是 note<type> 以后有用到类型必须加<type>
{
friend class List<type>;
private:
type a;//type类型的变量,
note<type> * next;
public:
note()
{
a=type();//type类型对应的零初始化,如果type是int .则a=int();即a=0;如果是double,则a=double();即a=0.0000000000;
next=NULL;
}
note(type b,note<type> *n=NULL)
{
a=b;
next=n;
}
};
template <typename type>
class List
{
private:
note<type> * frist;
note<type> * last;
int n;
public://模板类内的函数必须是模板函数
List()
{
last=frist=(note<type>*)malloc(sizeof(note<type>));
n=0;
}
void Push_back(type timp);
void showlist()const
{
note<type> *p=frist->next;
while(p)
{
cout<<p->a<<endl;
p=p->next;
}
}
};
template <typename type>//模板类的函数都是模板函数,如果要在类外定义一定不要忘了写函数模板
void List<type>::Push_back(type timp)//作用域限定一定是List<type>类型;
{
note<type> *p=(note<type>*)malloc(sizeof(note<type>));
p->a=timp;
p->next=NULL;
last->next=p;
last=last->next;
n++;
}
//类模板的类声明和具体的函数体不能像替他类一样分开在不同文件里,链接会有问题.除非有其他操作?
int main()
{
List<int> a;
for(int i=0;i<10;i++)
{
a.Push_back(i);
}
cout << "Hello world!" << endl;
a.showlist();
return 0;
}