• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            游戲的天空

            堅持不懈每一天

            C++博客 聯系 聚合 管理
              7 Posts :: 0 Stories :: 4 Comments :: 0 Trackbacks
            最近開始學習STL,C 標準模板庫,個人根據標準模板庫中的list 自己寫了個list模板,由于作業量較大,只實現了list里的基本功能,給大家分享下,如有更好的意見請加qq350544011,一起討論討論. 代碼如下:List.h文件:
            最近創建了自己的討論群 希望大家能一起加入 群號:45811732
            #ifndef LIST#define LIST#include "stdafx.h"

            /////////////////////////////鏈表類模板的聲明///////////////////////

            template<typename T>

            class CList

            {

            public:  
            //結點 struct Node 
            {    

               T node;

              Node* next; 

            };

             //跌代器 
             class iterator 
            {
                public:  iterator()  
               {     

               };

              ~iterator()  {          };       

               //重載"!=" 
                bool operator != (iterator &it) 
                {   
                     if(m_val != it.m_val)   
                     {   
                         return true;   
                     } 
                     return false;  
               }

              //重載"前++ "  
               iterator operator++ ()  
               {   
                  m_val = m_val->next;

                  return *this;  
               }

              //重載 "后++ "  
               iterator operator++ (int)
             {   
               m_val = m_val->next;

               return *this; 
             }

              //重載*  
            T operator*()  
            {  
                return m_val->node; 
              }

              Node *m_val; 

            private:    

            }; 

             CList();

             ~CList();   

            //在連表尾部添加
             void push_back(const T &_node);

             //在連表的頭部添加 
            void push_front(const T &_node);

             //刪除連表中的最后一個元素 
            void pop_back();

             //刪除連表中的第一個元素 
            void pop_front();

             //返回指向第一個元素的迭代器
             typename CList<T>::iterator begin();

             //返回末尾的迭代器 
            typename CList<T>::iterator end();

             //判斷是否為空
             bool empty(){ if(!m_phead){ return true; } return false; }

             //清空鏈表
             void clear();

            protected:

             private:  

                Node *m_phead;   

              };

             

            ////////////////////////////類模板的函數定義///////////////////////

            template<typename T>
            CList<T>::~CList()

            {

                //刪除鏈表里的所有結點
                if(m_phead)  
               {   
                  Node* temp = m_phead;

                 while(temp->next!=NULL) 
                  {  
                         Node* temp1 = temp;          

                        temp = temp->next;

                        delete temp1;

                     temp1 = NULL;  

                  }

                 m_phead = NULL;

                }

            }

            template<typename T>
             CList<T>::CList()

            m_phead = NULL;

            }

            template<typename T> 
            void CList<T>::push_back(const T &_node)

             //如果連表為空
             if(empty()) 
            {   
               Node* tempnode = new Node;

              tempnode->node =  _node;

              tempnode->next = NULL;

              m_phead = tempnode; 
             
             } 
            //如果連表不為空 
            else 
            {   

               Node *temp = m_phead;

                 while(temp->next!=NULL) 
                {   

                  temp = temp->next;  
                  }    
             
               Node* tempnode = new Node;    
               
               tempnode->node = _node;     
               
               tempnode->next = NULL;

              temp->next = tempnode;  
              
            }  

            }

             template<typename T>

            void CList<T>::push_front(const T &_node)

               if(empty()) 
               {     
                     Node* tempnode = new Node;

                    tempnode->node =  _node;

                    tempnode->next = NULL;

                    m_phead = tempnode;   
               } 
               else 
               { 
                   Node* tempnode = new Node;

                    tempnode->node = _node;

                    tempnode->next = m_phead->next;     m_phead = tempnode;

                }

            }

            template<typename T>void CList<T>::pop_back()

               if(empty())
                {  
                     return ; 
                } 
                else
                { 
                   Node* temp = m_phead;

                    if(!temp->next)  
                     {  

                      delete temp;

                  m_phead = NULL; 
                   }  
                   else  
                  {   
                     while(temp->next->next!=NULL)   
                     {    
                        temp = temp->next; 
                       }

                     delete temp->next;

               temp->next = NULL; 
                }   
                }
               }

            template<typename T>void CList<T>::pop_front()
             { 
               if(empty()) 
               {  
                  return; 
               } 
               else 
               {  
                     Node* temp = m_phead;

                    m_phead = m_phead->next;

                    delete temp;

                    temp = NULL; 
               }

            }

             template<typename T>typename CList<T>::iterator CList<T>::begin()
            {  
               iterator tempit;

               tempit.m_val = m_phead;

              return tempit;
            }

             template<typename T>typename CList<T>::iterator CList<T>::end()
            {  
               //如何去釋放?  
               iterator tempit  ;

              Node* tempnode1 = m_phead;

              while(tempnode1!=NULL)  
                  tempnode1 = tempnode1->next;

              tempit.m_val = tempnode1;

              return tempit;

            }

            template<typename T>void CList<T>::clear()

               //刪除鏈表里的所有結點 if(m_phead)
                {  
                  Node* temp = m_phead;

                 while(temp->next!=NULL)  
                  {   
                        Node* temp1 = temp;         
                         
                        temp = temp->next;

                        delete temp1;

                        temp1 = NULL;
              }

                    m_phead = NULL;  
               }

            }

            #endif
            posted on 2012-03-24 06:09 GLpro 閱讀(1224) 評論(1)  編輯 收藏 引用 所屬分類: C++基礎學習筆記

            Feedback

            # re: 自己實現了STL里的list部分功能 2012-03-25 09:49 tb
            相當的不錯啊   回復  更多評論
              

            AAA级久久久精品无码区| 婷婷国产天堂久久综合五月| 久久精品国产亚洲精品2020| 久久久中文字幕| 三级片免费观看久久| 热re99久久精品国99热| 九九久久99综合一区二区| 久久这里有精品| 久久久青草久久久青草| 精产国品久久一二三产区区别| www.久久热.com| 久久久亚洲欧洲日产国码是AV| 久久婷婷国产麻豆91天堂| 久久精品国产99国产精品导航| 亚洲成色999久久网站| 蜜臀久久99精品久久久久久小说| 久久人人爽人人澡人人高潮AV| 国内精品久久九九国产精品| 婷婷久久久亚洲欧洲日产国码AV | a级成人毛片久久| 久久天天婷婷五月俺也去| 国产精品久久久天天影视香蕉| 久久综合久久自在自线精品自| 国内精品久久国产| 色播久久人人爽人人爽人人片aV | 久久久久久精品免费看SSS| 大香网伊人久久综合网2020| 996久久国产精品线观看| 无码人妻久久一区二区三区免费| 一97日本道伊人久久综合影院| 久久精品免费网站网| 狠狠久久综合伊人不卡| 2020最新久久久视精品爱 | 欧美国产成人久久精品| 亚洲&#228;v永久无码精品天堂久久| 国产精品久久成人影院| 国产精品美女久久久久网| 久久99精品国产| 999久久久国产精品| 精品久久久无码中文字幕天天| 久久精品无码一区二区日韩AV|