#include <iostream>
using namespace std;
#include<cstdlib>
#include <string>
#define DEFAULT_INITIAL_SIZE_ 2
using namespace std;
template<class B>
class Stack{
private:
B*data;
long size;
long top;
public:
Stack();
Stack(long size);
~Stack(){
delete[] data;
}
void push(B element){
if(this->top==this->size){
stack_resize();
}
this->data[this->top]=element;
this->top++;
}
friend ostream& operator<<(ostream& os,const Stack & s){
if(s.top==0) return os<<"Stack is empty - nothing to print";
else{
for(int i=0;i<s.top;i++){
os<<s.data[i]<<" ";
}
return os<<"\n";
}
}
B pop(){
if(this->top==0){
cout<<"Can't pop from empty stack"<<endl;
exit(1);
}else{
this->top--;
return *(this->data+this->top);
}
}
bool is_empty(){
if(this->top==0) return true;
else return false;
}
void clear(){
this->top=0;
}
private:
void stack_resize(){
B*temporary_data=new B[2*(this->size)];
for(int i=0;i<(this->size);i++){
temporary_data[i]=(this->data[i]);
}
delete[] this->data;
this->data=temporary_data;
this->size=2*(this->size);
}
};
template<class B>
Stack<B>::Stack():size(2), top(0){
try{
data=new B[2];
}catch(bad_alloc& ex){
cout<<ex.what()<<endl;
//destruktor ???
}
}
template<class B>
Stack<B>::Stack(long size){
if(size<=0){
data=new B[2];
this->size=2;
this->top=0;
}
else{
try{
this->size=size;
this->top=0;
data=new B[size];
}catch(bad_alloc& ex){
cout<<ex.what()<<endl;
//destruktor ???
}
}
}
int main() {
Stack<string> s1;
s1.push(string("abab"));
s1.push(string("abab2"));
s1.push(string("abab3"));
cout << s1 << endl;
s1.pop();
cout << s1 << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2luY2x1ZGU8Y3N0ZGxpYj4KI2luY2x1ZGUgPHN0cmluZz4KI2RlZmluZSBERUZBVUxUX0lOSVRJQUxfU0laRV8gMgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPGNsYXNzIEI+CmNsYXNzIFN0YWNrewogICBwcml2YXRlOgogICAgICBCKmRhdGE7CiAgICAgIGxvbmcgc2l6ZTsgICAKICAgICAgbG9uZyB0b3A7ICAgIAoKICAgcHVibGljOgoKICAgICAgU3RhY2soKTsKCiAgICAgIFN0YWNrKGxvbmcgc2l6ZSk7CgogICAgICAgIH5TdGFjaygpewoKICAgICAgICAgICAgZGVsZXRlW10gZGF0YTsKICAgICAgICB9CgogICAgICAgIHZvaWQgcHVzaChCIGVsZW1lbnQpewogICAgICAgICAgICBpZih0aGlzLT50b3A9PXRoaXMtPnNpemUpewoKICAgICAgICAgICAgICAgICAgICBzdGFja19yZXNpemUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy0+ZGF0YVt0aGlzLT50b3BdPWVsZW1lbnQ7CiAgICAgICAgICAgIHRoaXMtPnRvcCsrOwoKICAgICAgICB9CgogICAgICAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsY29uc3QgU3RhY2sgJiBzKXsKICAgICAgICAgICAgaWYocy50b3A9PTApIHJldHVybiBvczw8IlN0YWNrIGlzIGVtcHR5IC0gbm90aGluZyB0byBwcmludCI7CiAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBpPTA7aTxzLnRvcDtpKyspewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3M8PHMuZGF0YVtpXTw8IiAiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvczw8IlxuIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICB9CgogICAgQiBwb3AoKXsKICAgICAgICBpZih0aGlzLT50b3A9PTApewogICAgICAgICAgICBjb3V0PDwiQ2FuJ3QgcG9wIGZyb20gZW1wdHkgc3RhY2siPDxlbmRsOwogICAgICAgICAgICBleGl0KDEpOyAgIAogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIHRoaXMtPnRvcC0tOwogICAgICAgICAgICAgICAgcmV0dXJuICoodGhpcy0+ZGF0YSt0aGlzLT50b3ApOwogICAgICAgICAgICAgICAgfQogICAgfQoKICAgIGJvb2wgaXNfZW1wdHkoKXsKICAgICAgICBpZih0aGlzLT50b3A9PTApIHJldHVybiB0cnVlOwogICAgICAgICAgICBlbHNlIHJldHVybiBmYWxzZTsKCiAgICB9CgogICAgdm9pZCBjbGVhcigpewogICAgICAgIHRoaXMtPnRvcD0wOwogICAgfQoKICAgIHByaXZhdGU6CiAgICAgICAgdm9pZCBzdGFja19yZXNpemUoKXsKICAgICAgICAgICAgQip0ZW1wb3JhcnlfZGF0YT1uZXcgQlsyKih0aGlzLT5zaXplKV07CiAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8KHRoaXMtPnNpemUpO2krKyl7CgogICAgICAgICAgICAgICAgdGVtcG9yYXJ5X2RhdGFbaV09KHRoaXMtPmRhdGFbaV0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkZWxldGVbXSB0aGlzLT5kYXRhOwogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy0+ZGF0YT10ZW1wb3JhcnlfZGF0YTsKICAgICAgICAgICAgdGhpcy0+c2l6ZT0yKih0aGlzLT5zaXplKTsKICAgICAgICB9Cgp9Owp0ZW1wbGF0ZTxjbGFzcyBCPgpTdGFjazxCPjo6U3RhY2soKTpzaXplKDIpLCB0b3AoMCl7CiAgIAoKICAgdHJ5ewogICAgICBkYXRhPW5ldyBCWzJdOwogICB9Y2F0Y2goYmFkX2FsbG9jJiBleCl7CiAgICAgICAgY291dDw8ZXgud2hhdCgpPDxlbmRsOwogICAgICAgIC8vZGVzdHJ1a3RvciA/Pz8KICAgIH0KfQoKdGVtcGxhdGU8Y2xhc3MgQj4KU3RhY2s8Qj46OlN0YWNrKGxvbmcgc2l6ZSl7CgogICAgICAgaWYoc2l6ZTw9MCl7CgogICAgICAgIGRhdGE9bmV3IEJbMl07CiAgICAgICAgdGhpcy0+c2l6ZT0yOwogICAgICAgIHRoaXMtPnRvcD0wOwogICAgICAgfQogICAgICAgZWxzZXsKCiAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgdGhpcy0+c2l6ZT1zaXplOwogICAgICAgICAgICAgICAgdGhpcy0+dG9wPTA7CiAgICAgICAgICAgICAgICBkYXRhPW5ldyBCW3NpemVdOwogICAgICAgICAgICB9Y2F0Y2goYmFkX2FsbG9jJiBleCl7CiAgICAgICAgICAgICAgICAgY291dDw8ZXgud2hhdCgpPDxlbmRsOwogICAgICAgICAgICAgICAgLy9kZXN0cnVrdG9yID8/PwogICAgICAgICAgICB9CiAgICAgICAgfQp9CgoKaW50IG1haW4oKSB7CglTdGFjazxzdHJpbmc+IHMxOwoJczEucHVzaChzdHJpbmcoImFiYWIiKSk7CglzMS5wdXNoKHN0cmluZygiYWJhYjIiKSk7CglzMS5wdXNoKHN0cmluZygiYWJhYjMiKSk7CgkKCWNvdXQgPDwgczEgPDwgZW5kbDsKCQoJczEucG9wKCk7CgkKCWNvdXQgPDwgczEgPDwgZW5kbDsKCQoJcmV0dXJuIDA7Cn0=