#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";
}
}
int 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;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2luY2x1ZGU8Y3N0ZGxpYj4KI2luY2x1ZGUgPHN0cmluZz4KI2RlZmluZSBERUZBVUxUX0lOSVRJQUxfU0laRV8gMgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPGNsYXNzIEI+CmNsYXNzIFN0YWNrewogICBwcml2YXRlOgogICAgICBCKmRhdGE7CiAgICAgIGxvbmcgc2l6ZTsgICAKICAgICAgbG9uZyB0b3A7ICAgIAoKICAgcHVibGljOgoKICAgICAgU3RhY2soKTsKCiAgICAgIFN0YWNrKGxvbmcgc2l6ZSk7CgogICAgICAgIH5TdGFjaygpewoKICAgICAgICAgICAgZGVsZXRlW10gZGF0YTsKICAgICAgICB9CgogICAgICAgIHZvaWQgcHVzaChCIGVsZW1lbnQpewogICAgICAgICAgICBpZih0aGlzLT50b3A9PXRoaXMtPnNpemUpewoKICAgICAgICAgICAgICAgICAgICBzdGFja19yZXNpemUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy0+ZGF0YVt0aGlzLT50b3BdPWVsZW1lbnQ7CiAgICAgICAgICAgIHRoaXMtPnRvcCsrOwoKICAgICAgICB9CgogICAgICAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsY29uc3QgU3RhY2sgJiBzKXsKICAgICAgICAgICAgaWYocy50b3A9PTApIHJldHVybiBvczw8IlN0YWNrIGlzIGVtcHR5IC0gbm90aGluZyB0byBwcmludCI7CiAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBpPTA7aTxzLnRvcDtpKyspewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3M8PHMuZGF0YVtpXTw8IiAiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvczw8IlxuIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICB9CgogICAgaW50IHBvcCgpewogICAgICAgIGlmKHRoaXMtPnRvcD09MCl7CiAgICAgICAgICAgIGNvdXQ8PCJDYW4ndCBwb3AgZnJvbSBlbXB0eSBzdGFjayI8PGVuZGw7CiAgICAgICAgICAgIGV4aXQoMSk7ICAgCiAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgdGhpcy0+dG9wLS07CiAgICAgICAgICAgICAgICByZXR1cm4gKih0aGlzLT5kYXRhK3RoaXMtPnRvcCk7CiAgICAgICAgICAgICAgICB9CiAgICB9CgogICAgYm9vbCBpc19lbXB0eSgpewogICAgICAgIGlmKHRoaXMtPnRvcD09MCkgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwoKICAgIH0KCiAgICB2b2lkIGNsZWFyKCl7CiAgICAgICAgdGhpcy0+dG9wPTA7CiAgICB9CgogICAgcHJpdmF0ZToKICAgICAgICB2b2lkIHN0YWNrX3Jlc2l6ZSgpewogICAgICAgICAgICBCKnRlbXBvcmFyeV9kYXRhPW5ldyBCWzIqKHRoaXMtPnNpemUpXTsKICAgICAgICAgICAgZm9yKGludCBpPTA7aTwodGhpcy0+c2l6ZSk7aSsrKXsKCiAgICAgICAgICAgICAgICB0ZW1wb3JhcnlfZGF0YVtpXT0odGhpcy0+ZGF0YVtpXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGRlbGV0ZVtdIHRoaXMtPmRhdGE7CiAgICAgICAgICAgIAogICAgICAgICAgICB0aGlzLT5kYXRhPXRlbXBvcmFyeV9kYXRhOwogICAgICAgICAgICB0aGlzLT5zaXplPTIqKHRoaXMtPnNpemUpOwogICAgICAgIH0KCn07CnRlbXBsYXRlPGNsYXNzIEI+ClN0YWNrPEI+OjpTdGFjaygpOnNpemUoMiksIHRvcCgwKXsKICAgCgogICB0cnl7CiAgICAgIGRhdGE9bmV3IEJbMl07CiAgIH1jYXRjaChiYWRfYWxsb2MmIGV4KXsKICAgICAgICBjb3V0PDxleC53aGF0KCk8PGVuZGw7CiAgICAgICAgLy9kZXN0cnVrdG9yID8/PwogICAgfQp9Cgp0ZW1wbGF0ZTxjbGFzcyBCPgpTdGFjazxCPjo6U3RhY2sobG9uZyBzaXplKXsKCiAgICAgICBpZihzaXplPD0wKXsKCiAgICAgICAgZGF0YT1uZXcgQlsyXTsKICAgICAgICB0aGlzLT5zaXplPTI7CiAgICAgICAgdGhpcy0+dG9wPTA7CiAgICAgICB9CiAgICAgICBlbHNlewoKICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICB0aGlzLT5zaXplPXNpemU7CiAgICAgICAgICAgICAgICB0aGlzLT50b3A9MDsKICAgICAgICAgICAgICAgIGRhdGE9bmV3IEJbc2l6ZV07CiAgICAgICAgICAgIH1jYXRjaChiYWRfYWxsb2MmIGV4KXsKICAgICAgICAgICAgICAgICBjb3V0PDxleC53aGF0KCk8PGVuZGw7CiAgICAgICAgICAgICAgICAvL2Rlc3RydWt0b3IgPz8/CiAgICAgICAgICAgIH0KICAgICAgICB9Cn0KCgppbnQgbWFpbigpIHsKCVN0YWNrPHN0cmluZz4gczE7CglzMS5wdXNoKHN0cmluZygiYWJhYiIpKTsKCXMxLnB1c2goc3RyaW5nKCJhYmFiMiIpKTsKCXMxLnB1c2goc3RyaW5nKCJhYmFiMyIpKTsKCQoJY291dCA8PCBzMSA8PCBlbmRsOwoJCglyZXR1cm4gMDsKfQ==