c++ stl list 迭代器简单实现
2008-07-16 14:11
447 查看
#include<iostream.h>
template<class T>
class node
{
public:
T data;
void * pre;
void * next;
};
template<class T>
class iter
{
public:
typedef node<T> * lnode;
lnode pnode;
iter(iter<T>& a):pnode(a.pnode){}
iter(){}
iter(lnode a):pnode(a){}
T & operator *() const {return (pnode->data);}
T * operator ->()const {return &(operator *());}
bool operator !=(iter<T> & a )const {return pnode != a.pnode; }
bool operator ==(iter<T> & a )const {return pnode == a.pnode; }
iter<T> & operator++() {pnode=(lnode)pnode->next; return *this;}
iter<T> & operator--() {pnode=(lnode)pnode->pre; return *this;}
iter<T> operator--(int) {iter<T> tmp=*this; --*this;return tmp;}
iter<T> operator++(int) {iter<T> tmp=*this; ++*this;return tmp;}
};
template<class T>
class test
{
public:
typedef iter<T> iterator;
typedef node<T> * lp;
public:
test(T a);
test();
~test();
iterator first();
iterator end();
void insert(T a);
void clear();
private:
lp p;
};
template<class T>
test<T>::test(T a)
{
lp tmp=new node<T>;
tmp->data=a;
tmp->pre=NULL;
tmp->next=p;
node<T> *tmpp=(node<T> *)p->pre;
tmpp->next=tmp;
}
template<class T>
test<T>::test()
{
p= new node<T>;
p->pre=p;
p->next=p;
}
template<class T>
test<T>::~test()
{
delete p;
}
template<class T>
void test<T>::clear()
{
lp tmp=NULL;
lp root=p;
while(p->next != root)
{
tmp=(lp)p->next;
delete p;
p=tmp;
}
}
template<class T>
void test<T>::insert(T a)
{
node<T> *tmp=new node<T>;
tmp->data=a;
tmp->pre=NULL;
tmp->next=p;
node<T> *tmpp=(node<T> *)p->pre;
tmpp->next=tmp;
p->pre=tmp;
}
template<class T>
typename test<T>::iterator test<T>::first()
{
return (lp)p->next;
}
template<class T>
typename test<T>::iterator test<T>::end()
{
return p;
}
int main()
{
test<int> a;
a.insert(99);
a.insert(10);
a.insert(93);
a.insert(29);
a.insert(59);
a.insert(69);
a.insert(79);
a.insert(66);
a.insert(340);
a.insert(0);
a.insert(330);
test<int>::iterator i,ii;
i=a.first();
ii=a.end();
while(i != ii)
{
cout<<*i<<endl;
i++;
}
a.clear();
return 0;
}
template<class T>
class node
{
public:
T data;
void * pre;
void * next;
};
template<class T>
class iter
{
public:
typedef node<T> * lnode;
lnode pnode;
iter(iter<T>& a):pnode(a.pnode){}
iter(){}
iter(lnode a):pnode(a){}
T & operator *() const {return (pnode->data);}
T * operator ->()const {return &(operator *());}
bool operator !=(iter<T> & a )const {return pnode != a.pnode; }
bool operator ==(iter<T> & a )const {return pnode == a.pnode; }
iter<T> & operator++() {pnode=(lnode)pnode->next; return *this;}
iter<T> & operator--() {pnode=(lnode)pnode->pre; return *this;}
iter<T> operator--(int) {iter<T> tmp=*this; --*this;return tmp;}
iter<T> operator++(int) {iter<T> tmp=*this; ++*this;return tmp;}
};
template<class T>
class test
{
public:
typedef iter<T> iterator;
typedef node<T> * lp;
public:
test(T a);
test();
~test();
iterator first();
iterator end();
void insert(T a);
void clear();
private:
lp p;
};
template<class T>
test<T>::test(T a)
{
lp tmp=new node<T>;
tmp->data=a;
tmp->pre=NULL;
tmp->next=p;
node<T> *tmpp=(node<T> *)p->pre;
tmpp->next=tmp;
}
template<class T>
test<T>::test()
{
p= new node<T>;
p->pre=p;
p->next=p;
}
template<class T>
test<T>::~test()
{
delete p;
}
template<class T>
void test<T>::clear()
{
lp tmp=NULL;
lp root=p;
while(p->next != root)
{
tmp=(lp)p->next;
delete p;
p=tmp;
}
}
template<class T>
void test<T>::insert(T a)
{
node<T> *tmp=new node<T>;
tmp->data=a;
tmp->pre=NULL;
tmp->next=p;
node<T> *tmpp=(node<T> *)p->pre;
tmpp->next=tmp;
p->pre=tmp;
}
template<class T>
typename test<T>::iterator test<T>::first()
{
return (lp)p->next;
}
template<class T>
typename test<T>::iterator test<T>::end()
{
return p;
}
int main()
{
test<int> a;
a.insert(99);
a.insert(10);
a.insert(93);
a.insert(29);
a.insert(59);
a.insert(69);
a.insert(79);
a.insert(66);
a.insert(340);
a.insert(0);
a.insert(330);
test<int>::iterator i,ii;
i=a.first();
ii=a.end();
while(i != ii)
{
cout<<*i<<endl;
i++;
}
a.clear();
return 0;
}
相关文章推荐
- c++ stl list实现简单的学生信息管理系统
- STL,迭代器的C++简单实现
- c++ stl list实现简单的学生信息管理系统
- 简单工厂模式 C++实现
- C++实现简单的希尔排序Shell Sort实例
- C++ — 智能指针的简单实现以及循环引用问题
- 从零开始学C++之重载 operator new 和 operator delete 实现一个简单内存泄漏跟踪器
- C++自定义String类(简单的实现功能)
- 非常经典的C++ 引用计数技术及智能指针的简单实现
- C++ 简单代理实现
- 迭代器就是重复地做一些事情,可以简单的理解为循环,在python中实现了__iter__方法的对象是可迭代的,实现了next()方法的对象是迭代器,这样说起来有
- LRU的C++的简单实现
- Nginx&C++实现简单的fastcgi程序
- c++实现栈简单功能小程
- 简单插入算法的C++实现
- c++智能指针的简单实现
- [C++]List with iterator(链表的迭代器实现)
- C++实现将简单密码译回原文的方法
- C++贪吃蛇的简单实现版
- 算法导论-排序的Python&C++简单实现