• <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>

            游戲的天空

            堅(jiān)持不懈每一天

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

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

            template<typename T>

            class CList

            {

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

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

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

             //返回指向第一個(gè)元素的迭代器
             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é)點(diǎn)
                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é)點(diǎn) 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 閱讀(1222) 評(píng)論(1)  編輯 收藏 引用 所屬分類: C++基礎(chǔ)學(xué)習(xí)筆記

            Feedback

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

            久久精品国产亚洲一区二区| 伊人久久一区二区三区无码| 一本伊大人香蕉久久网手机| 国产成人精品久久综合| 性高湖久久久久久久久AAAAA | 热99RE久久精品这里都是精品免费| 色天使久久综合网天天| 精品精品国产自在久久高清| 人人狠狠综合88综合久久| 精品熟女少妇a∨免费久久| 欧美麻豆久久久久久中文| AAA级久久久精品无码片| 久久这里只精品99re66| 中文字幕亚洲综合久久| 久久久久久精品无码人妻| 国产高潮久久免费观看| 久久大香香蕉国产| 亚洲国产欧洲综合997久久| 蜜桃麻豆www久久国产精品| 青青青伊人色综合久久| 久久久久亚洲AV无码永不| 久久亚洲AV成人无码| 久久久久亚洲精品男人的天堂| 久久99精品国产| 精品久久久久久无码专区| 亚洲精品高清国产一线久久| 综合久久精品色| 久久久久黑人强伦姧人妻| 国产高清国内精品福利99久久| 91精品国产综合久久久久久| 精品国产VA久久久久久久冰 | 51久久夜色精品国产| 99久久久精品| 国产亚洲美女精品久久久久狼| 久久久久久人妻无码| 国产精品一区二区久久不卡| 国产午夜免费高清久久影院| 国产精品久久成人影院| 久久国产亚洲精品麻豆| 99久久夜色精品国产网站| 国产精品久久久久久久午夜片|