【原创】ios
咱们在不少状况下会遇到这样的状况,好比说,一个链表,他的数据类型有int,char,double等,这个时候咱们可能直观的理解就是创建多个struct Node{};这样当然能狗解决问题,可是这并不可取,太过死板,这时候利用c++中的模板,能够很好的解决这一问题;关于模板那里的东西,能够查看相关的书籍,下面直接给出一份可用代码,注意查看main函数中的操做,十分的方便c++
1 #include <iostream> 2 using namespace std; 3 template <class T> 4 class List{ 5 public: 6 List(); 7 void Add(T&);//说明T是一种数据类型 8 void Remove(T&); 9 void PrintList(); 10 ~List(); 11 protected: 12 struct Node{ 13 Node *pNext; 14 T data;//说明T了 15 }; 16 Node *pHead;//指向链表头节点的指针; 17 }; 18 //对成员函数的实现 19 template <class T> 20 List<T>::List(){ 21 pHead = NULL; 22 } 23 template <class T> 24 void List<T>::Add(T& t){//这是成员函数,可以访问类中的成员数据 25 Node *temp = new Node; 26 temp->data = t; 27 temp->pNext = pHead; 28 pHead = temp;//该对象的头指针做出了改变 29 } 30 template <class T> 31 void List<T>::Remove(T& t){ 32 Node* q = 0; 33 if (pHead->data==t) {//删除的是头节点 34 q = pHead; 35 pHead = pHead->pNext; 36 }else{ 37 for(Node *p=pHead;p->pNext;p=p->pNext){ 38 if (p->pNext->data==t) { 39 q = p->pNext; 40 p->pNext = q->pNext; 41 break; 42 } 43 } 44 } 45 if (q) { 46 delete q; 47 } 48 } 49 template<class T> 50 void List<T>::PrintList(){ 51 for (Node* p = pHead; p; p=p->pNext) { 52 cout<<(p->data)<<" "; 53 } 54 cout<<endl; 55 } 56 template <class T> 57 List<T>::~List(){ 58 Node *p; 59 while (pHead!=NULL) { 60 p = pHead; 61 pHead = pHead->pNext; 62 delete p; 63 } 64 } 65 int main() { 66 List<int> intList; 67 int a[10] = {1,2,3,4,5,6,7,8,9,10}; 68 List<char> charList; 69 for (int i = 0; i<sizeof(a)/sizeof(int); i++){ 70 intList.Add(a[i]); 71 char b = 'a'+a[i]; 72 charList.Add(b); 73 } 74 intList.PrintList(); 75 charList.PrintList(); 76 int m; 77 cin>>m; 78 intList.Remove(m); 79 char c = 'a'+m; 80 charList.Remove(c); 81 intList.PrintList(); 82 charList.PrintList(); 83 84 return 0; 85 }