有谁能帮我调一下指针的++,--操作吗?
Code:
#ifndef Listb_H
#define Listb_H
template<typename T>
void Free(T*p){delete p;p=nullptr;return;}
template<typename T>
class Node{
public:
Node *pre,*next;T val;
Node(){}
Node(T v,Node*p=nullptr,Node*n=nullptr){val=v,pre=p,next=n;}
Node* operator++(){this=next;return this;}
Node* operator--(){this=pre;return this;}
Node* operator++(int){
Node*tmp=this;this=next;
return tmp;
}
Node* operator--(int){
Node*tmp=this;this=pre;
return tmp;
}
T& operator*(){return this->val;}
};
template<typename T>
class List{
private:
Node<T> *head,*tail,*newnode,*cur;
public:
void clear();
void create();
void push_front(T v);
void push_back(T v);
void pop_front();
void pop_back();
T front();
T back();
int size();
bool empty();
auto begin();
auto end();
};
template<typename T>
void List<T>::clear(){
while(!empty()) pop_back();
return;
}
template<typename T>
void List<T>::create(){
head=new Node<T>(T());tail=new Node<T>(T());
head->next=tail;tail->pre=head;
return;
}
template<typename T>
void List<T>::push_front(T v){
newnode=new Node<T>(v,head,head->next);
head->next->pre=newnode;head->next=newnode;
return;
}
template<typename T>
void List<T>::push_back(T v){
newnode=new Node<T>(v,tail->pre,tail);
tail->pre->next=newnode;tail->pre=newnode;
return;
}
template<typename T>
void List<T>::pop_front(){
if(empty()) return;
cur=head->next;
head->next->next->pre=head;head->next=head->next->next;
cur->pre=cur->next=nullptr;cur->val=T();Free(cur);
return;
}
template<typename T>
void List<T>::pop_back(){
if(empty()) return;
cur=tail->pre;
tail->pre->pre->next=tail;tail->pre=tail->pre->pre;
cur->pre=cur->next=nullptr;cur->val=T();Free(cur);
return;
}
template<typename T>
T List<T>::front(){return head->next->val;}
template<typename T>
T List<T>::back(){return tail->pre->val;}
template<typename T>
int List<T>::size(){
int l=0;cur=head->next;
while(cur!=tail) ++l,cur=cur->next;
return l;
}
template<typename T>
bool List<T>::empty(){return (head==nullptr&&tail==nullptr)||head->next==tail;}
template<typename T>
auto List<T>::begin(){return head->next;}
template<typename T>
auto List<T>::end(){return tail;}
#endif
这里面的++,--操作一进行就变野指针,求调!
有玩RLCraft的吗