⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listiterator.h

📁 用C++实现多项式处理
💻 H
字号:
//#include<iostream.h>
#include <assert.h>
#include"iterator.h"
//#include"list.h"
//#include"link.h"
template<class T>class List;
template<class T>class Link;
template<class T>class listIterator:public iterator<T>{
	public:
		listIterator(List<T> &aList);
		virtual int init();
		virtual T operator()();
		virtual int operator!();
		virtual int operator++();
		virtual void operator=(T value);
		void removeCurrent();
		void addBefore(T newValue);
		void addAfter(T newValue);
    protected:
		Link<T> *currentLink;
		Link<T> *previousLink;
		List<T> &theList;
};
template<class T>
listIterator<T>::listIterator(List<T> &aList):theList(aList){
	init();
}
template<class T>
int listIterator<T>::init(){
	previousLink=0;
	currentLink=theList.ptrtofirstLink;
	return currentLink!=0;
}
template<class T>
T listIterator<T>::operator()(){
	assert(currentLink!=0);
	return currentLink->value;
}
template<class T>
void listIterator<T>::operator=(T val){
	assert(currentLink!=0);
	currentLink->value=val;
}
template<class T>
void listIterator<T>::removeCurrent(){
	assert(currentLink!=0);
	if(previousLink==0)
		theList.ptrtofirstLink=currentLink->ptrtonextLink;
	else
		previousLink->ptrtonextLink=currentLink->ptrtonextLink;
	delete currentLink;
	currentLink=0;
}
template<class T>
int listIterator<T>::operator++(){
	if(currentLink==0)
		if(previousLink==0)
			currentLink=theList.ptrtofirstLink;
		else
			currentLink=previousLink->ptrtonextLink;
		else
			previousLink=currentLink;
		currentLink=currentLink->ptrtonextLink;
		return currentLink!=0;
}
template<class T>
int listIterator<T>::operator!(){
	if(currentLink!=0)
		return 1;
	if(previousLink!=0)
		return previousLink->ptrtonextLink!=0;
	return theList.ptrtofirstLink!=0;
}
template<class T>
void listIterator<T>::addBefore(T val){
	if(previousLink)
		previousLink=previousLink->insert(val);
	else{
		theList.List<T>::add(val);
		previousLink=theList.ptrtofirstLink;
	}
}
template<class T>
void listIterator<T>::addAfter(T val){
	if(currentLink!=0)
		currentLink->insert(val);
	else if(previousLink!=0)
		previousLink->insert(val);
	else theList.List<T>::add(val);
}
//#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -