首页 > 编程 > C++ > 正文

顺序表-----C++实现

2019-11-06 08:04:41
字体:
来源:转载
供稿:网友
#include<assert.h>
#include<stdio.h>#include<stdlib.h>#include<iostream>using namespace std;#define DataType intclass Vector{public:	Vector()		:_pData(new DataType[3])		,_capacity(3)		,_size(0)	{}	Vector(const Vector& v)		:_pData(new DataType[v._capacity])		,_capacity(v._capacity)		,_size(v._size)	{		//memcpy(_pDate,v._pDate);		for(size_t idx=0;idx<_size;idx++)		{			_pData[idx]=v._pData[idx];		}	}	Vector& Operator=(const Vector& v)	{		DataType* pTemp=new DataType[v._capacity];		for(size_t idx=0;idx<v._capacity;idx++)		{			pTemp[idx]=v._pData[idx];		}		delete[] _pData;		_pData=pTemp;		_capacity=v._capacity;		_size=v._size;		return *this;	}	void PushBack(const DataType& data)	{		_CheckCapacity();		_pData[_size++]=data;	}	void PopBack()	{		//assert(0 == _size);		if(_size==0)		{			return;		}		--_size;	}	void Insert(size_t pos, const DataType& data)	{	if((_size-1)==pos)		{			PushBack(data);		}		else		{			_size+=1;			_CheckCapacity();			for(size_t idx=_size-1;idx>pos;idx--)			{				_pData[++idx]=_pData[idx];			}			_pData[pos+1]=data;		}	}	void Erase(size_t pos)	{		size_t ret=_size;		if((--ret)==pos)		{			PopBack();		}else if(0==pos)		{			DataType* pTemp=new int[_capacity];			for(size_t idx=1;idx<_size;idx++)			{				pTemp[idx-1]=_pData[idx];			}			delete[] _pData;			_pData =pTemp;			--_size;		}		else		{			for(size_t idx=pos+1;idx<_size;idx++)			{				_pData[idx-1]=_pData[idx];			}			--_size;		}	}	void Assign(size_t n, const DataType& data)	{		_size=n;		_CheckCapacity();		DataType* pTemp=new DataType[_capacity];		for(size_t idx=0;idx<n;idx++)		{			pTemp[idx]=data;		}		delete[] _pData;		_pData = pTemp;	}	int Find(const DataType& data)	{		for(size_t idx=0;idx<_size;idx++)		{			if(_pData[idx]==data)			{				return idx;			}		}		return -1;	}	////////访问元素//////////////////	DataType& Front()	{		assert(_pData);		return _pData[0];	}	const DataType& Front()const	{		assert(_pData);		return _pData[0];	}	DataType& Back()	{		assert(_pData);		return _pData[_size-1];	}	const DataType& Back()const	{		assert(_pData);		return _pData[_size-1];	}	DataType& operator[](size_t index)	{		assert(index<_size);		return _pData[index];	}	const DataType& operator[](size_t index)const	{		assert(index<_size);		return _pData[index];	}	DataType& At(size_t index)	{		assert(index<_size);		return _pData[index];	}	const DataType& At(size_t index)const	{		assert(index<_size);		return _pData[index];	}		//////////容量///////////////////	size_t Size()const	{		return _size;	}	size_t Capacity()const	{		return _capacity;	}	bool Empty()const	{		if(0==_size)		{			return true;		}		return false;	}	void ReSize(size_t n, const DataType& data = DataType())	{		if(n<=_size)		{			_size = n;		}		else		{			size_t ret = _size;			_size = n;			_CheckCapacity();			for(size_t idx=ret;idx<n;idx++)			{				_pData[idx] = data;			}		}	}	void Clear()	{		_size=0;	}	~Vector()	{		if(NULL != _pData)		{			delete[] _pData;			_pData=NULL;			_capacity=0;			_size=0;		}	}PRivate:	void _CheckCapacity()	{		if(_size>=_capacity)		{			DataType* pTemp=new DataType[2*_capacity];			for(size_t idx=0;idx<_size;idx++)			{				pTemp[idx]=_pData[idx];			}			delete[] _pData;			_pData = pTemp;			_capacity=2*_capacity;		}	}private:	DataType* _pData;	size_t _capacity;	size_t _size;};void funtest(){	Vector v1;	v1.PushBack(1);	v1.PushBack(2);	v1.PushBack(3);	int a=3;	int ret=v1.Find(a);	/*v1.Erase(1);*/	//v1.Insert(2,7); 	//v1.PopBack();	/*v1.ReSize(5,10);	int ret = v1.At(4);*/}int main(){	funtest();	return 0;}以上为动态顺序表C++实现,即在类中实现
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选