#pragma once #include "vector.hpp" template class Stack { private: Vector data; std::size_t actualSize; public: void Push(T const & value) { ++actualSize; if(actualSize > data.GetSize()) { data.Resize(actualSize); } data[actualSize - 1ul] = value; } T Pop() { if(actualSize == 0ul) { throw std::out_of_range("Cannot pop an empty stack."); } auto const retval = data[actualSize - 1ul]; --actualSize; data.Resize(actualSize); return retval; } std::size_t GetSize() const { return actualSize; } Stack() : actualSize(0) { } };