• 熟悉模板操作--简单的list


      1 #ifndef _LIST_H__
      2 #define _LIST_H__
      3 #include<stdlib.h>
      4 template<class Type> class List;
      5 
      6 
      7 template<class Type>
      8 class Link
      9 {
     10     friend class List<Type>;
     11     
     12 private:
     13     Type m_Data;
     14     Link<Type>* m_Next;
     15     Link<Type>* m_Pre;
     16     Link(const Type& Val, Link<Type>* Next, Link<Type>* Pre);
     17 
     18 };
     19 
     20 template<class Type>
     21 Link<Type>::Link(const Type& Val, Link<Type>* Next, Link<Type>* Pre):m_Data(Val), m_Next(Next),m_Pre(Pre)
     22 {
     23     
     24 }
     25 
     26 template <class Type>
     27 class List
     28 {
     29 public:
     30     class Iterator
     31     {
     32     private:
     33         List<Type>* m_pList;
     34         Link<Type>* m_pLink;
     35     public:
     36         Iterator( List<Type>* pList, Link<Type>* pLink):m_pList(pList), m_pLink(pLink)
     37         {
     38         
     39         }
     40         Iterator():m_pList(NULL), m_pLink(NULL)
     41         {
     42             
     43         }
     44 
     45         Type& operator*()
     46         {
     47             return (m_pLink->m_Data);
     48         }
     49 
     50         Type* operator->()
     51         {
     52             return &(m_pLink->m_Data);
     53         }
     54 
     55         Iterator& operator++()
     56         {
     57             if(m_pLink->m_Next != NULL)
     58             {
     59                 m_pLink = m_pLink->m_Next;
     60             }
     61             else
     62             {
     63                 m_pLink = NULL;
     64             }
     65             return *this;
     66         }
     67 
     68         Iterator operator++(int)
     69         {
     70             Iterator tmp = *this;
     71             ++ *this;
     72             return tmp;
     73         }
     74 
     75         bool operator==(Iterator iter)
     76         {
     77             return (m_pList == iter.m_pList && m_pLink == iter.m_pLink);
     78         }
     79 
     80         bool operator!=(Iterator iter)
     81         {
     82             return (m_pList != iter.m_pList || m_pLink != iter.m_pLink);
     83         }
     84     };
     85 private:
     86     Link<Type>* m_stHead;
     87     int n_element;
     88     Link<Type>* m_stTail;
     89 public:
     90     List():m_stHead(NULL),m_stTail(NULL),n_element(0)
     91     {
     92     
     93     }
     94     ~List()
     95     {
     96     
     97     }
     98 
     99     Iterator begin()
    100     {
    101         return Iterator(this, m_stHead);
    102     }
    103 
    104     Iterator end()
    105     {
    106         return Iterator(this, NULL);
    107     }
    108 
    109     int push_back(const Type& stData)
    110     {
    111         //检查是否是第一个元素
    112         if(NULL == m_stHead)
    113         {
    114             Link<Type>* pLink = new Link<Type>(stData, NULL, NULL);
    115             m_stHead = pLink;
    116             m_stTail = pLink;
    117         }
    118         else
    119         {
    120         //不是最后一个元素
    121             Link<Type>* pLink = new Link<Type>(stData, NULL, m_stTail);
    122             m_stTail->m_Next = pLink;
    123             m_stTail = pLink;
    124         }
    125         n_element ++;
    126         return 0;
    127     }
    128     
    129 };
    130 #endif
    #include "List.h"
    #include <stdio.h>
    int main()
    {
    	List<int> IList;
    	IList.push_back(5);
    	IList.push_back(6);
    	IList.push_back(7);
    
    	List<int>::Iterator iter ;
    	for(iter = IList.begin(); iter != IList.end(); iter ++ )
    	{
    		printf("%d
    ", *iter);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    利用SQL注入漏洞登录后台
    http://www.cnblogs.com/xdp-gacl/p/4200090.html
    文件上传的三种模式-Java
    Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题
    win10 安装 mysql解压版安装步骤
    移动开发首页业界资讯移动应用平台技术专题 输入您要搜索的内容 基于Java Socket的自定义协议,实现Android与服务器的长连接(二)
    IEDA 启动main报 stock
    基于JavaMail的Java邮件发送:简单邮件发送
    如何确定一个需求是真需求
    VS中批注的使用
  • 原文地址:https://www.cnblogs.com/lzhenf/p/3659900.html
Copyright © 2020-2023  润新知