#include <iostream>
#include <cstring>
using namespace std;
class Static
{
private:
int *arr; //动态分配栈
int top; //指向栈顶元素
int capacity; //记录栈的最大容量
public:
//有参构造函数
Static(int size) : top(-1), capacity(size)
{
arr = new int[capacity];
cout<<"有参构造"<<endl;
}
//析构函数
~Static()
{
delete[] arr;
cout<<"析构函数"<<endl;
}
//赋值给容器适配器
Static & operator=(const Static &brr);
//访问栈顶元素
int _top();
//访问最后一个元素
int _back();
//栈判空
bool _empty();
//返回容纳的元素数
int _size();
//向栈顶插入元素
void _push(int value);
//删除栈顶元素
void _pop();
void show();
};
Static &Static::operator=(const Static &brr)
{
if(this != &brr)
{
delete[] arr; //释放掉原本栈的内存空间
capacity = brr.capacity;
top = brr.top;
arr = new int[capacity]; //重新给栈申请和brr大小一样的空间
for(int i = 0; i <= top; i++)
{
arr[i] = brr.arr[i];
}
}
return *this;
}
int Static::_top()
{
if(_empty()) //判断栈是否为空
{
cout<<"栈为空"<<endl;
return -1;
}
return arr[0];
}
int Static:: _back()
{
if(_empty())
{
cout<<"栈为空"<<endl;
}
return arr[top];
}
bool Static::_empty()
{
return top == -1;
}
int Static::_size()
{
return capacity;
}
void Static::_push(int value)
{
if(top >= capacity)
{
cout<<"栈满无法插入"<<endl;
return ;
}
arr[++top] = value;
cout<<value<<"插入成功"<<endl;
}
void Static::_pop()
{
if(_empty())
{
cout<<"栈为空"<<endl;
return ;
}
top--; //直接将栈顶减一
cout<<"删除栈顶元素成功"<<endl;
}
void Static::show()
{
for(int i=0;i<=this->top;i++)
{
cout<<arr[i]<<endl;
}
}
int main()
{
Static c1(100);
c1._push(99);
c1._push(10);
c1._push(11);
c1._push(199);
c1.show();
cout<<"栈顶元素"<<c1._top()<<endl; //访问栈顶元素
cout<<"最大个数是"<<c1._size()<<endl; //返回最大能个数
c1._pop(); //删除栈顶元素
c1.show();
cout<<"栈顶元素是"<<c1._top()<<endl; //访问栈顶元素
return 0;
}
11-24
682