/*
模板分类(class 和 typename的意思是一样一样的)
1、函数模板
template<typename 类型名1,typename 类型名2,…………>
类型名 函数名(参数1,………………)
{
}
2、类模板
模板分类(class 和 typename的意思是一样一样的)
1、函数模板
template<typename 类型名1,typename 类型名2,…………>
类型名 函数名(参数1,………………)
{
}
2、类模板
*/
#include <iostream>
using namespace std;
template<typename Type>
class List;
/*函数模板*/
template<typename Type1, class Type2>
Type2 Max(Type1 a, Type2 b)
{
return a > b ? a : b;
}
/*类模板 实现一个容器verctor的简单效果*/
/*结点类*/
template<typename Type>
class ListNode{
friend List<Type>;
public:
ListNode():data(Type())/*零初始化*/
{
}
ListNode(Type d, ListNode<Type> *n = NULL):data(d),Next(n)
{
}
private:
Type data;
ListNode<Type> *Next;
};
/*链表模板实现*/
template<typename Type>
class List
{
public:
List();
bool push_back(Type d);
void show() const;
private:
ListNode<Type> *begin;
ListNode<Type> *end;
size_t size;
};
/*类模板的成员函数是模板函数,这里必须加上模板的声明*/
template<typename Type>
List<Type>::List()
{
begin = end = (ListNode<Type>*)malloc(sizeof(sizeof(ListNode<Type>)));
begin->Next = end;
end->Next = NULL;
size = 0;
}
template<typename Type>
bool List<Type>::push_back(Type d)
{
ListNode<Type> *s = (ListNode<Type>*)malloc(sizeof(ListNode<Type>));
if (s == NULL)
{
return false;
}
s->data = d;
s->Next=NULL;
end->Next = s;
end = s;
size++;
return true;
}
template<typename Type>
void List<Type>::show()const
{
ListNode<Type> *p = begin->Next;
while(p)
{
cout << p->data << "-->";
p = p->Next;
}
cout << "Nul." << endl;
}
int main()
{
/*cout << Max(45, 81.34) <<endl;*/
List<int> myList;
for(int i=0; i<10 ;i++)
{
myList.push_back(i);
}
myList.show();
return 0;
}