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++实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!