#pragmaoncetemplate<classT>classCMyVector{
T *vector;int first;//指向vector第一个元素int last;//指向vector最后一个元素int capacity;//vector总大小public:CMyVector(){
vector =NULL;
first = last = capacity =0;}CMyVector(CMyVector const& other){
capacity = other.capacity;
vector =new T[capacity];for(int i =0; i < other.size(); i++)
vector[i]= other.vector[i];
first = other.first;
last = other.last;}~CMyVector(){if(vector){delete[] vector;}
vector =NULL;}//赋num个值为val的元素到vector中.//这个函数将会清除掉为vector赋值以前的内容voidassign(int num, T const& val){clear();if(capacity ==0){resize(num);}for(int i =0; i < num; i++)
vector[last++]= val;}//在Vector最后添加一个元素voidpush_back(T const& val){if(last == capacity){int volume = capacity +(capacity >>1);resize(volume);}
vector[last++]= val;}//移除最后一个元素voidpop_back(){
last--;}//在指定位置前插入num个值为val的元素到Vector中voidinsert(int loc,int num, T const& val){if(loc < last && loc >= first){if((last + num)>= capacity){resize(last + num);}int end = last -1;for(int i = last + num -1; i >= loc + num; i--){
vector[i]= vector[end--];}for(int i = loc; i < loc + num; i++){
vector[i]= val;}
last = last + num;}elseprintf("指定位置错误!\n");}//返回指定位置的元素
T at(int loc)const{if(loc < last && loc >= first)return vector[loc];elseprintf("指定位置错误!\n");}//返回Vector元素数量的大小intsize(){return last - first;}//扩容voidresize(int volume){if(volume > capacity){
T *temp =new T[volume];for(int i =0; i <size(); i++)
temp[i]= vector[i];delete[] vector;
vector = temp;
capacity = volume;}elseprintf("size必须大于当前容量!\n");}//清空voidclear(){erase(first, last);}//删除指定元素voiderase(int loc){if(loc < last && loc >= first){for(int i = loc; i < last -1; i++){
vector[i]= vector[i +1];}
last--;}elseprintf("指定位置错误!\n");}//删除区间[start,end)之间的元素voiderase(int start,int end){if(start >= first && end > start && end < last){for(int i = start; i < last; i++){if(end < last){
vector[i]= vector[end++];}else{
last = i;break;}}}elseif(start == first && end == last){
capacity = last = first;}elseprintf("区间错误!\n");}};