#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;};