• <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++博客 聯(lián)系 聚合 管理
              7 Posts :: 0 Stories :: 4 Comments :: 0 Trackbacks
            最近開始學(xué)習(xí)STL,C 標(biāo)準(zhǔn)模板庫,個人根據(jù)標(biāo)準(zhǔn)模板庫中的list 自己寫了個list模板,由于作業(yè)量較大,只實現(xiàn)了list里的基本功能,給大家分享下,如有更好的意見請加qq350544011,一起討論討論. 代碼如下:List.h文件:
            最近創(chuàng)建了自己的討論群 希望大家能一起加入 群號:45811732
            #ifndef LIST#define LIST#include "stdafx.h"

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

            template<typename T>

            class CList

            {

            public:  
            //結(jié)點 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;   

              };

             

            ////////////////////////////類模板的函數(shù)定義///////////////////////

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

            {

                //刪除鏈表里的所有結(jié)點
                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()

               //刪除鏈表里的所有結(jié)點 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 閱讀(1223) 評論(1)  編輯 收藏 引用 所屬分類: C++基礎(chǔ)學(xué)習(xí)筆記

            Feedback

            # re: 自己實現(xiàn)了STL里的list部分功能 2012-03-25 09:49 tb
            相當(dāng)?shù)牟诲e啊   回復(fù)  更多評論
              

            久久亚洲精品无码播放| 久久婷婷国产综合精品| 国产精品热久久无码av| 久久男人中文字幕资源站| 久久毛片一区二区| 久久精品国产亚洲AV无码娇色| 9久久9久久精品| 思思久久好好热精品国产 | 久久精品国产精品亚洲| 日韩十八禁一区二区久久| 色欲久久久天天天综合网精品| 亚洲欧美精品伊人久久| 久久综合亚洲鲁鲁五月天| 久久99国产精品久久久| 久久久久久精品免费看SSS| 四虎国产精品免费久久久| 久久强奷乱码老熟女网站| 欧美精品一本久久男人的天堂| 久久国产欧美日韩精品| 亚洲精品国精品久久99热| 久久99精品综合国产首页| 亚洲国产精品成人久久| 亚洲人成无码久久电影网站| 久久久久无码精品国产| 99久久无色码中文字幕人妻| 99久久国产综合精品成人影院| 国产精品久久午夜夜伦鲁鲁| 久久中文字幕人妻丝袜| 色狠狠久久综合网| 色婷婷狠狠久久综合五月| 久久精品无码一区二区三区日韩| 97久久精品无码一区二区天美| 人妻无码αv中文字幕久久琪琪布| 婷婷久久综合| 亚洲国产成人久久综合一区77 | 久久久黄色大片| 日韩精品无码久久一区二区三| 91精品观看91久久久久久| 狠狠干狠狠久久| 国产日产久久高清欧美一区| 精品免费tv久久久久久久|