网盘直链下载助手:9大平台高速下载的终极解决方案
2026/6/8 23:35:28
以下代码是实现stack的类,包括size(目前长度),data(指针),total(总长度)
resize(扩容函数)等。
template<typenameT>classstack{private:intsize;T*data;inttotal;voidresize();public:stack():data(newT[10]),size(0),total(10){}~stack();voidpush(T value);Tpop();Ttop()const;intgetsize()const;};对于扩容函数resize(),我们先把新的总长度变成原来的总长度的二倍。
然后申请新的空间,新的空间大小用newtotal。
然后把原来的数组的元素存到新的数组里面,然后删除原来的数组的内容,把新的newdata赋值给原来的data,这样data就指向了新的数组的首元素,此处是把指向新数组首地址的指针newdata赋值给了data,让data指向新数组的首地址。
template<typenameT>voidstack<T>::resize(){intnewTotal=total*2;T*newdata=newT[newTotal];for(inti=0;i<size;++i){newdata[i]=data[i];}delete[]data;data=newdata;total=newTotal;}template<typenameT>stack<T>::~stack(){delete[]data;}template<typenameT>voidstack<T>::push(T value){if(size==total){resize();}data[size++]=value;}template<typenameT>Tstack<T>::pop(){if(size==0){throwstd::underflow_error("stack is empty");}returndata[--size];}template<typenameT>Tstack<T>::top()const{if(size==0){throwunderflow_error("stack is empty");}returndata[size-1];}template<typenameT>intstack<T>::getsize()const{returnsize;}