MyStack.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #pragma once
  2. #include <iostream>
  3. template <class T, int size> class MyStack
  4. {
  5. T m_ar[size];
  6. size_t exist;
  7. public:
  8. inline MyStack():exist(0) {};// êîíòðóêòîð exist = 0
  9. T& operator[](int);
  10. void Push(const T&);
  11. T Pop();
  12. void Print();
  13. //3.îáÿçàòåëüíûìè îïåðàöèÿìè ñî ñòåêîì ÿâëÿþòñÿ "push" è "pop".Äëÿ
  14. // òîãî, ÷òîáû ãàðàíòèðîâàòü êîððåêòíîå âûïîëíåíèå ýòèõ îïåðàöèé
  15. // õîðîøî áûëî áû ãåíåðèðîâàòü èñêëþ÷åíèå â àâàðèéíîé ñèòóàöèè
  16. //friend std::ostream& operator<<(std::ostream& os, const MyStack& stack);
  17. };
  18. //ïîëüçîâàòåëü ìîæåò ÷èòàòü/èçìåíÿòü çíà÷åíèÿ òîëüêî òåõ ýëåìåíòîâ, êîòîðûå îí ôîðìèðîâàë
  19. template <class T, int size>
  20. inline T& MyStack <T, size>::operator[] (int i)
  21. {
  22. if (i >= 0 && i < exist)
  23. {
  24. return m_ar[i];
  25. }
  26. else throw std::logic_error("Data isn't exist");
  27. }
  28. template<class T, int size>
  29. inline void MyStack<T, size>::Push(const T& addable)
  30. {
  31. if (exist < size)
  32. {
  33. m_ar[exist] = addable;
  34. exist++;
  35. }
  36. else throw std::logic_error("overflow stack");
  37. }
  38. template<class T, int size>
  39. inline T MyStack<T, size>::Pop()
  40. {
  41. if (exist > 0)
  42. {
  43. exist--;
  44. return m_ar[exist];//à ðåñóðñû???
  45. }
  46. else
  47. throw std::logic_error("empty stack");
  48. }
  49. template<class T, int size>
  50. inline void MyStack<T, size>::Print()
  51. {
  52. if (!exist) { std::cout << "empty stack" << std::endl; }
  53. for (int i = 0; i < exist; i++)
  54. {
  55. std::cout << m_ar[i]<<std::endl;
  56. }
  57. std::cout << std::endl;
  58. }