#include
<vector>#include
<stdexcept>template
<class T>class
Stack{
private
:std::
vector<T> elems;public
:void push(T const&);
void pop();
T top() const;
bool empty() const
{
return elems.empty();}
Stack();
~Stack()
{
std::cout <<
"destructor called." << std::endl;}
};
template
<class T>void
Stack<T>::push(T const& elem){
std::cout <<
"push is called: " << std::endl; elems.push_back(elem);}
template
<class T>void
Stack<T>::pop(){
if (elems.empty()){
throw std::out_of_range("Stack<>::pop(): empty stack");}
elems.pop_back();}
template
<class T>T
Stack<T>::top() const{
if (elems.empty()){
std::cout <<
"empty stack" << std::endl; throw std::out_of_range("Stack<>::top(): empty stack");}
return elems.back();}
template
<class T>Stack<T>::Stack
(){
std::cout <<
"Default constructor called.." << std::endl; }#include
<iostream>#include
<string>#include
<cstdlib>#include
"stack1.h"int
main(){
try{
std::cout <<
"Starting the process: " << std::endl; Stack<int> intStack;// Stack<std::string> stringStack;
std::cout <<
"Is empty: " << intStack.empty() << std::endl;intStack.push(7);
int x = intStack.top();std::cout << x << std::endl;
}
catch(std::exception const& ex){
std::cout <<
"Exception: " << ex.what() << std::endl; return EXIT_FAILURE;}
}