重载指针运算符出错,求助!
查看原帖
重载指针运算符出错,求助!
762117
快速数论变换楼主2025/1/14 21:40

本蒟蒻在用指针实现链表,为里面的迭代器重载了++--*运算符,但++--运算后结果不正确,*运算符编译出错,求助! 链表实现:

#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

测试代码:

#include<bits/stdc++.h>
#include"_list(beta).h"
using namespace std;
int main(){
    ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
	List<int> l;
	l.create();l.push_back(1);l.push_back(2);
	auto p=l.begin();p++;
	cout<<p->val;
	return 0;
}

输出的数啥都有,但都不是2。

2025/1/14 21:40
加载中...