【原創】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 }