这就是一个ABS类,里面封装了一个栈吧,需要是模板类么
至少pop函数有问题
return data[_Cur];
delete[] data;
data=newarray;
_Cur--;
return怎么在前面呢。这样后面三句永远执行不到的啊。data就没有被释放,也不会改变为newarray,内存自然泄漏,代码肯定也不对了
#include
using namespace std;
template
class ABS
{
int _Max;
int _Cur;
T* data;
public:
void Set(const ABS &d){
this->_Max=d._Max;
this->_Cur=d._Cur;
data=new T[_Max];
for(unsigned int i=0;i<_Cur;i++){
this->data[i]=d.data[i];
}
}
ABS()
{
_Max=1;
_Cur=0;
data=new T[_Max];
}
ABS(int capacity)
{
_Max=capacity;
_Cur=0;
data=new T[capacity];
}
ABS(const ABS &d){
Set(d);
}
ABS &operator=(const ABS &d){
delete[] data;
Set(d);
}
~ABS(){
delete[] data;
}
void push(T newdata){
if(_Cur==_Max){
_Max++;
T* newarray=new T[_Max];
for(int i;i<_Cur;i++){
newarray[i]=data[i];
}
newarray[_Cur]=newdata;
delete[] data;
data=newarray;
}
data[_Cur]=newdata;
_Cur++;
}
T pop(){
if(_Cur==0){
throw runtime_error("An error has occurred.");
}
if(_Cur/_Max<0.5){
_Max=_Cur;
}
T* newarray=new T[_Max];
for(int i;i<_Cur-1;i++){
newarray[i]=data[i];
}
return data[_Cur];
delete[] data;
data=newarray;
_Cur--;
}
T peek(){
if(_Cur==0){
throw runtime_error("An error has occurred.");
}
return data[_Cur];
}
unsigned int getSize(){
return _Cur;
}
unsigned int getMaxCapacity(){
return _Max;
}
T* getData(){
return data;
}
};