Advertisement
Guest User

Untitled

a guest
Jul 26th, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.04 KB | None | 0 0
  1. #ifndef _TOP_HPP
  2. #define _TOP_HPP
  3.  
  4. #include<memory>
  5. #include<iostream>
  6. #include<cstring>
  7.  
  8.  
  9. template <typename T>
  10. class Stack{
  11. private:
  12. struct Node{
  13. std::shared_ptr<Node> prev;
  14. T value;
  15. };
  16.  
  17. int size;
  18. std::shared_ptr<Node> top;
  19. const char* name;
  20.  
  21. public:
  22. Stack();
  23. Stack(const char* name);
  24. bool isEmpty()const;
  25. void push(T);
  26. const int pop();
  27. const int getSize()const{return size;}
  28. const char& getName()const{return name;}
  29. void clear();
  30.  
  31. Stack<T>& operator=(const Stack<T>&);
  32. //don't know why but when implement this friend fun beyond
  33. //class then main.cpp don't compile
  34. friend std::ostream& operator<<(std::ostream& os,const Stack<T>& s){
  35. if(strcmp(s.name,"null")) os<<"Name: "<<s.name<<" Size "<<s.size<<std::endl;
  36. auto temp=s.top.get();
  37. while(temp){
  38. os<<temp->value<<std::endl;
  39. temp=temp->prev.get();
  40. }
  41. return os<<std::endl;
  42. }
  43.  
  44.  
  45. };
  46.  
  47.  
  48. template <typename T>
  49. inline Stack<T>::Stack():size(0),top(std::make_shared<Node>()),name("null"){
  50. top->prev=nullptr;
  51. top->value=0;
  52. }
  53.  
  54. template <typename T>
  55. inline Stack<T>::Stack(const char* name):size(0),top(std::make_shared<Node>()),name(name){
  56. top->prev=nullptr;
  57. top->value=0;
  58. }
  59.  
  60. template <typename T>
  61. inline bool Stack<T>::isEmpty()const{
  62. if(size==0) return true;
  63. return false;
  64. }
  65.  
  66. template <typename T>
  67. void Stack<T>::push(T x){
  68. std::shared_ptr<Node> add =std::make_shared<Node>();
  69. add->value=x;
  70. add->prev=nullptr;
  71. if(isEmpty()) top=std::move(add);
  72. else{
  73. add->prev=std::move(top);
  74. top=std::move(add);
  75. }
  76. ++size;
  77. }
  78.  
  79. template <typename T>
  80. const int Stack<T>::pop(){
  81. int p=top->value;
  82. if(isEmpty()){ std::cerr<<"stack is empty"<<std::endl; }
  83. else{
  84. top=top->prev; //this is good idea ?
  85. --size;
  86. }
  87. return p;
  88. }
  89.  
  90.  
  91. template <typename T>
  92. Stack<T>& Stack<T>::operator=(const Stack<T>& s){
  93. if(this!=&s){
  94. size=s.size;
  95. top=s.top;
  96. }
  97. return *this;
  98. }
  99.  
  100. template <typename T>
  101. inline void Stack<T>::clear(){
  102. while(top){
  103. top=std::move(top->prev);i//how can i improve this ?
  104. --size;
  105. }
  106. }
  107.  
  108.  
  109. #endif
  110.  
  111. #include<iostream>
  112. #include<memory>
  113. #include "stack.hpp"
  114.  
  115.  
  116. using namespace std;
  117.  
  118.  
  119. int main(){
  120.  
  121. Stack<int> s("asd");
  122. Stack<int> q;
  123. s.push(12);
  124. s.push(13);
  125. s.push(14);
  126. s.push(15);
  127.  
  128. q=s;
  129.  
  130. cout<<s; //cout's normal display a stacks
  131. cout<<q;
  132. s.clear(); // after this fun on s
  133.  
  134. cout<<s; // this stack is delete
  135. cout<<q; // this stack have only 15 (top of stack s) ;/
  136.  
  137.  
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement