C++实现顺序表的方法
废话不多说了,直接给大家上关键代码了。
#pragmaonce
#include<assert.h>
template<classT>
classSeqList
{
public:
SeqList()
:_a(NULL)
,_size(1)
,_capacity(1)
{}
SeqList(T*a,size_tsize)
:_a(newT[size])
,_size(size)
,_capacity(size)
{
for(size_ti=0;i<_size;++i)
{
_a[i]=a[i];
}
}
//拷贝构造函数常规写法
/*SeqList(constSeqList<T>&s)
:_a(newT[s._size])
,_size(s._size)
,_capacity(s._capacity)
{
for(size_ti=0;i<_size;++i)
_a[i]=s._a[i];
}*/
//拷贝构造函数现代写法
SeqList(constSeqList<T>&s)
:_a(NULL)
{
SeqList<T>tmp(s._a,s._size);
swap(_a,tmp._a);
_size=s._size;
_capacity=s._capacity;
}
~SeqList()
{
if(_a)
delete[]_a;
}
//赋值运算符重载常规写法
SeqList<T>&operator=(constSeqList<T>&s)
{
if(this!=&s)
{
T*tmp=newT[s._size];
for(size_ti=0;i<s._size;++i)
{
tmp[i]=s._a[i];
}
delete[]_a;
_a=tmp;
_size=s._size;
_capacity=s._capacity;
}
return*this;
}
//赋值运算符重载现代写法
/*SeqList<T>&operator=(SeqList<T>s)
{
if(this!=&s)
{
swap(_a,s._a);
_size=s._size;
_capacity=s._capacity;
}
return*this;
}*/
public:
voidPrint()
{
for(size_ti=0;i<_size;++i)
{
cout<<_a[i]<<"";
}
cout<<endl;
}
voidPushBack(constT&x)
{
_CheckCapacity();
_a[_size++]=x;
}
voidPopBack()
{
assert(_size>0);
--_size;
}
voidInsert(intpos,constT&x)
{
assert(pos>=0&&pos<=_size);
_CheckCapacity();
intiIndex=_size;
while(iIndex>pos)//int和size_t比较为什么不行?
{
_a[iIndex]=_a[iIndex-1];
--iIndex;
}
_a[iIndex]=x;
++_size;
}
voidErase(size_tpos)
{
assert(_size>0&&pos<_size);
size_tindex=pos;
while(index<_size-1)
{
_a[index]=_a[index+1];
++index;
}
--_size;
}
intFind(constT&x)
{
for(size_ti=0;i<_size;++i)
{
if(_a[i]==x)
{
returni;
}
}
return-1;
}
T&operator[](size_tindex)
{
assert(index>=0&&index<_size);
return_a[index];
}
voidReserve(size_tsize)//保留空间,增容到size
{
_capacity=size;
_a=(T*)realloc(_a,_capacity*sizeof(T));
}
voidClear()//不释放空间
{
_size=0;
}
voidSize()
{
return_size;
}
protected:
void_CheckCapacity()
{
if(_size+1>_capacity)
{
_capacity=_capacity*2;
_a=(T*)realloc(_a,_capacity*sizeof(T));
}
}
protected:
T*_a;
size_t_size;
size_t_capacity;
};
以上所述是小编给大家介绍的顺序表的C++实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!