#include <iostream>
#include <cstdio>
using namespace std;
template<class T>
class List{
public:
struct node{
T data;
node(){ next = prior = NULL;}
node *next, *prior;
};
private:
node *head, *tail;
public:
List(){head = tail = NULL;}
node* begin(){ return head;}
node* rbegin(){ return tail;}
node* end(){ return NULL;}
node* rend(){ return NULL;}
T front(){ return head->data;}
T back(){ return tail->data;}
void clear(){
node *p = head;
while(p){
head = p, p = p->next;
delete head;
}
head = tail = NULL;
}
void push_back(T data){
node *p = new node;
p->data = data;
if(head == NULL) head = tail = p;
else tail->next = p, p->prior = tail, tail = p;
}
void push_front(T data){
node *p = new node;
p->data = data;
if(head == NULL) head = tail = p;
else head->prior = p, p->next = head, head = p;
}
void pop_back(){
if(head == tail) head = tail = NULL;
else tail = tail->prior, delete tail->next;
}
void pop_front(){
if(head == tail) head = tail = NULL;
else head = head->next, delete head->prior;
}
~List(){ clear();}
struct iterator{
node *p;
iterator(){p = NULL;}
iterator(node* q){ p = q;}
node* operator ++(){p = p->next; return p;}
node* operator --(){p = p->prior; return p;}
iterator& operator = (node* q){p = q; return *this;}
bool operator != (node* q){ return p != q;}
bool operator ==(node* q){ return p == q;}
T operator *(){ return p->data;}
};
};
int main(){
List<int>L;
for(int i = 0; i < 12; i++) L.push_back(i);
for(int i = 0; i < 4; i++) L.push_front(-i);
// while(L.begin()) L.pop_front();
for(int i = 9; i < 12; i++) L.push_back(-i);
// while(L.begin()) L.pop_front();
for(List<int>::iterator it = L.begin(); it != L.end(); ++it){
cout << *it << " ";
}
puts("");
return 0;
}
STL_迭代器_简单双向链表
最新推荐文章于 2024-06-27 21:11:41 发布