C++STL基础及应用第27页

C++STL基础与应用第27页中的代码,如下:

#include <iostream>
#include <iterator>
#include <ostream>

using namespace std;
template<class T>
class MyLink
{
	public:
	   struct Unit
   	   {
   	      T value;
		  Unit * next;	
       };
       class LinkIterator
       {
       	  Unit * init;
       	  public:
       	    LinkIterator(Unit *init)
       	    {
    	       this->init= init;   	
  	        }
  	        bool operator !=(LinkIterator& t)
  	        {
        	   return this->init!=t.init;
       	    }
       	    void operator ++(int)
       	    {
    	       init = init->next;   	
   	        }
   	        Unit  operator * ()
   	        {
        	   return  *init;   	
       	    }
       };
       Unit * head;
       Unit * tail;
       Unit * prev;
    public:
	       MyLink()
	       {
	       	   head = tail = prev = NULL;
	       }
	       void add(T & value)
	       {
       	      Unit * u = new Unit();
			  u->value = value;
			  u->next  = NULL;
			  if(head == NULL)
			  {
  			     head = u;
				 prev = u;	
  			  }	
  			  else
  			  {
  			  	 prev->next = u;
  			  	 prev = u;
  			  }
  			  tail = u->next;
       	   }
       	   Unit * Begin()
       	   {
   	       	  return head;
   	       }
   	       Unit * End()
   	       {
       	   	  return tail;
       	   }
       	   virtual ~MyLink()
       	   {
   	       	  if(head != NULL)
   	       	  {
  	       	      Unit * prev = head;
				  Unit * next = NULL;
				  while(prev != tail)
				  {
  				     next = prev->next;
					 delete prev;
					 prev = next;	
  				  }	    	
       	      }
   	       }
   	      
};
//template <class T> //这句不能用
//ostream & operator << (ostream & os, MyLink<T>::LinkIterator s)//这句也要改成如下
ostream & operator << (ostream & os, MyLink<int>::LinkIterator s)
{ 
   os << (*s).value ; 
   return os;
}
template<class Init>
void display(Init S,Init E)
{
    cout << endl;
    for(Init mid = S; mid!=E; mid++)
    { 
        cout << mid <<"\t";
    }
    cout <<endl;
}
int main(int argc, char *argv[])
{ 
      int m=0; MyLink<int> ml; 
      for(int i=0;i<5;i++) 
      { 
        m = i+1; ml.add(m); 
      } 
      MyLink<int> ::LinkIterator s(ml.Begin()); 
      MyLink<int> ::LinkIterator e(ml.End());
      display(s,e);
      return 0;
}
 
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值