Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cstdlib>
- #include <algorithm>
- #include <typeinfo>
- using namespace std;
- template <typename T, bool isString = (string == typeid(T).name())>
- class Stack {
- private:
- vector<T> elems;
- public:
- void push(T const&);
- T& pop();
- T top() const;
- T maxElement() const;
- bool empty() const{
- return elems.empty();
- }
- };
- template <typename T, bool isString>
- void Stack<T, isString>::push (T const& elem){
- elems.push_back(elem);
- }
- template <typename T, bool isString>
- T& Stack<T, isString>::pop (){
- if (elems.empty()){
- throw out_of_range( "Stack<>::pop(): empty stack" );
- }
- return elems.pop_back();
- }
- template <typename T, bool isString>
- T Stack<T, isString>::top () const{
- if (elems.empty()){
- throw out_of_range( "Stack<>::top(): empty stack" );
- }
- return elems.back();
- }
- template <typename T, bool isString>
- T Stack<T, isString>::maxElement() const{
- int max = elems[0];
- for (int i = 1; i < elems.size(); i++){
- if (elems[i] > max){
- max = elems[i];
- }
- }
- return max;
- }
- template <typename T>
- class Stack<T, true> {
- private:
- vector<string> elems;
- vector<string> addelems;
- public:
- void pushstring(T const&);
- T& popstring();
- T topstring() const;
- T topreversedstring() const;
- void reverseString();
- };
- template <typename T>
- T& Stack<T, true>::popstring (){
- if (elems.empty()){
- throw out_of_range( "Stack<>::pop(): empty stack" );
- }
- elems.pop_back();
- }
- template <typename T>
- void Stack<T, true>::pushstring (T const& elem){
- elems.push_back(elem);
- }
- template <typename T>
- T Stack<T, true>::topstring () const{
- if (addelems.empty()){
- throw out_of_range( "Stack<>::top(): empty stack" );
- }
- return addelems.back();
- }
- template <typename T>
- T Stack<T, true>::topreversedstring () const{
- if (elems.empty()){
- throw out_of_range( "Stack<>::top(): empty stack" );
- }
- return elems.back();
- }
- template <typename T>
- void Stack<T, true>::reverseString(){
- for (int i = 0; i < elems.size(); i++){
- addelems.push_back(elems[i]);
- reverse(elems[i].begin(), elems[i].end());
- }
- }
- /////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement