掌握信息:

1.声明类模板的时候,要给出模板信息。

template<typename Type>
class ListNode{
}

2.类模板里面的所有函数,全都是模板函数。所以在外面实现的话,要加上模板信息。

template<typename Type>
List<Type>::List(){
}

3.要使用模板参数。

bool List<Type>::push_back(Type x){
}

模板不允许定义和实现分开在两个文件。

#include<iostream>
using namespace std;

template<typename Type>
class List;

template<typename Type>
class ListNode{
	friend class List<Type>;  //这样就能访问私有成员数据
public:
	ListNode():data(Type()),next(NULL)  //零初始化
	{}
	ListNode(Type d,ListNode<Type> *n=NULL)
		:data(d),next(n)
	{}
	~ListNode()
	{}
private:
	Type data;  //类型是Type类型
	ListNode<Type> *next;
};

template<typename Type>  //定义类的时候,必须加上这个
class List{
public:
	List();  //如果需要放在外面实现
	bool push_back(Type x);
	void show_list()const;
private:
	ListNode<Type> *first;
	ListNode<Type> *last;
	size_t size;
};

template<typename Type>  //可以用T,习惯用Type
List<Type>::List(){  //把模板参数Type给出
	first = last = (ListNode<Type>*)malloc(sizeof(ListNode<Type>));
	last->next = NULL;
	size = 0;
}

template<typename Type>
bool List<Type>::push_back(Type x){
	ListNode<Type> *s = (ListNode<Type>*)malloc(sizeof(ListNode<Type>));
	if(s == NULL)
		return false;
	s->data = x;
	s->next = NULL;

	last->next = s;
	last = s;
	size++;
	return true;
}

template<typename Type>
void List<Type>::show_list()const{
	ListNode<Type> *p = first->next;
	while(p != NULL){
		cout<<p->data<<"-->";
		p = p->next;
	}
	cout<<"NULL"<<endl;
}

void main(){
	List<int> mylist;
	//List<char> yourlist;
	for(int i = 1;i <= 10; ++i){
		mylist.push_back(i);
	}
	mylist.show_list();

	//字符型链表
	List<char> yourlist;
	for(int j = 65;j <= 75; ++j){
		yourlist.push_back(j);
	}
	yourlist.show_list();
	return;
}

版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~