#include iostream
#include vector
#include cstdlib
#include string
#include stdexcept
using namespace std;
template class T
class Stack {
private:
vectorT elems; // elements
public:
void push(T const&); // push element
void pop(); // pop element
T top() const; // return top element
bool empty() const{ // return true if empty.
return elems.empty();
}
};
template class T
void StackT::push (T const& elem) {
// append copy of passed element
elems.push_back(elem);
}
template class T
void StackT::pop () {
if (elems.empty()) {
throw out_of_range("Stack::pop(): empty stack");
}
// remove last element
elems.pop_back();
}
template class T
T StackT::top () const {
if (elems.empty()) {
throw out_of_range("Stack::top(): empty stack");
}
// return copy of last element
return elems.back();
}
int main() {
try {
Stackint intStack; // stack of ints
Stackstring stringStack; // stack of strings
// manipulate int stack
intStack.push(16);
cout intStack.top() endl;
// manipulate string stack
stringStack.push("codezclub");
cout stringStack.top() std::endl;
stringStack.pop();
}catch (exception const& ex) {
cerr "Exception: " ex.what() endl;
return -1;
}
}
The output of code is: