1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #pragma once
- #include <iostream>
- template <class T, int size> class MyStack
- {
- T m_ar[size];
- size_t exist;
- public:
- inline MyStack():exist(0) {};// êîíòðóêòîð exist = 0
- T& operator[](int);
- void Push(const T&);
- T Pop();
- void Print();
- //3.îáÿçàòåëüíûìè îïåðàöèÿìè ñî ñòåêîì ÿâëÿþòñÿ "push" è "pop".Äëÿ
- // òîãî, ÷òîáû ãàðàíòèðîâàòü êîððåêòíîå âûïîëíåíèå ýòèõ îïåðàöèé
- // õîðîøî áûëî áû ãåíåðèðîâàòü èñêëþ÷åíèå â àâàðèéíîé ñèòóàöèè
- //friend std::ostream& operator<<(std::ostream& os, const MyStack& stack);
- };
- //ïîëüçîâàòåëü ìîæåò ÷èòàòü/èçìåíÿòü çíà÷åíèÿ òîëüêî òåõ ýëåìåíòîâ, êîòîðûå îí ôîðìèðîâàë
- template <class T, int size>
- inline T& MyStack <T, size>::operator[] (int i)
- {
- if (i >= 0 && i < exist)
- {
- return m_ar[i];
- }
- else throw std::logic_error("Data isn't exist");
- }
- template<class T, int size>
- inline void MyStack<T, size>::Push(const T& addable)
- {
- if (exist < size)
- {
- m_ar[exist] = addable;
- exist++;
- }
- else throw std::logic_error("overflow stack");
- }
- template<class T, int size>
- inline T MyStack<T, size>::Pop()
- {
- if (exist > 0)
- {
- exist--;
- return m_ar[exist];//à ðåñóðñû???
- }
- else
- throw std::logic_error("empty stack");
- }
- template<class T, int size>
- inline void MyStack<T, size>::Print()
- {
- if (!exist) { std::cout << "empty stack" << std::endl; }
- for (int i = 0; i < exist; i++)
- {
- std::cout << m_ar[i]<<std::endl;
- }
- std::cout << std::endl;
- }
|