迭代器实现

来源:互联网 发布:免费手机监听卧底软件 编辑:程序博客网 时间:2024/06/06 12:22

#include <iostream>
using namespace std;

//T为要装载的对象

template<typename T>
class ListItem
{
private:
 T _value;
 ListItem* _next;
public:
 T value() const
 {
  return _value;
 }
 ListItem *next()const
 {
  return _next;
 }
 void setValue(T v)
 {
  _value = v;
 }
 void setNext(ListItem *pNext)
 {
  _next = pNext;
 }

};

//容器类(以链表的形式实现)

template<typename T>
class List
{
public:
 class ListIter
 {
 public: 
   ListItem<T> *ptr;
   ListIter(ListItem<T> *p = 0) : ptr(p){};
   ListItem<T> &operator*()const
   {
    return *ptr;
   }
   ListItem<T> *operator->() const
   {
    return ptr;
   }
   ListIter &operator++()
   {
    ptr = ptr->next();
    return *this;
   }
   ListIter &operator++(int)
   {
    ListIter tmp = *this;
    ++*this;
    return tmp;
   }
   bool operator==(const ListIter& rth) const
   {
    return ptr = rth.ptr;
   }
   bool operator!=(const ListIter& rth) const
   {
    return ptr != rth.ptr;
   }
 };
private:
 long _size;
 ListItem<T> *_front;
 ListItem<T> *_end;
public:
 List() : _front(NULL), _end(NULL){}
 ~List(){}
 ListItem<T> *begin() const
 {
  return _front;
 }
 ListItem<T> *end()
 {
  return _end->next();
 }

 void insert_front(T value)
 {
  ListItem<T> *item = new ListItem<T>;
  item->setValue(value);
  item->setNext(NULL);
  if(_front == NULL)
  {
   _front = _end = item;
  }
  else
  {
   item->setNext(_front);
   _front = item;
  }
 }
 void insert_end(T value)
 {
  ListItem<T> *item = new ListItem<T>;
  item->setValue(value);
  item->setNext(NULL);
  if(_front == NULL)
  {
   _front = _end = item;
  }
  else
  {
   _end->setNext(item);
   _end = item;
  }
 }
 void display(ostream &os = cout)
 {
  ListItem<T> *tmp = _front;
  while(tmp != _end->next())
  {
   cout<<tmp->value()<<" ";
   tmp = tmp->next();
  }
  cout<<endl;
 }
};

int main()
{
 List<int> s;
 for(int i = 0; i < 5; ++i)
 {
  s.insert_front(i);
  s.insert_end(i+2);
 }
 s.display();

 List<int>::ListIter it;
 for(it = s.begin(); it != s.end(); it++)
 {
  printf("%d/n", *it);
 }

 return 0;
}

原创粉丝点击