• <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 閱讀(1239) 評論(1)  編輯 收藏 引用 所屬分類: C++基礎學習筆記

            Feedback

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

            久久精品成人一区二区三区| 欧美久久一级内射wwwwww.| 日日狠狠久久偷偷色综合96蜜桃 | 久久夜色tv网站| 粉嫩小泬无遮挡久久久久久| 人妻无码αv中文字幕久久| 亚洲AV日韩AV天堂久久| 色8久久人人97超碰香蕉987| 久久午夜伦鲁片免费无码| 久久精品国产亚洲AV麻豆网站 | 久久亚洲日韩精品一区二区三区| 天天影视色香欲综合久久| 久久天天躁狠狠躁夜夜2020老熟妇| 青青青国产精品国产精品久久久久| 久久国产精品99久久久久久老狼| 国产毛片久久久久久国产毛片 | 欧美久久综合性欧美| 国内精品免费久久影院| 久久久久国产一级毛片高清板| 久久99热这里只频精品6| 久久久久久午夜精品| 久久国产精品无码HDAV| 色综合久久天天综合| 综合久久精品色| 久久99免费视频| 亚洲精品高清一二区久久| 亚洲中文字幕久久精品无码APP | 蜜臀av性久久久久蜜臀aⅴ麻豆| 青春久久| 国产精品视频久久久| 国产精品熟女福利久久AV| 亚洲第一极品精品无码久久| 久久香蕉一级毛片| 久久精品无码一区二区WWW| 天天爽天天爽天天片a久久网| 伊人久久亚洲综合影院| 久久美女人爽女人爽| 一本一本久久A久久综合精品| 久久e热在这里只有国产中文精品99| 狠狠综合久久AV一区二区三区| 国产精品久久久99|