Advertisement
Petrovi4

StackVector

Jul 29th, 2022 (edited)
1,127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <array>
  2. #include <stdexcept>
  3.  
  4. template <typename T, size_t N>
  5. class StackVector {
  6. public:
  7.     explicit StackVector(size_t a_size = 0)
  8.         :size_array_(a_size)
  9.     {
  10.         if (a_size > N) {
  11.             throw std::invalid_argument("Error: capacity exceeded");
  12.         }
  13.     }
  14.  
  15.     T& operator[](size_t index) {
  16.         return stackvector_.at(index);
  17.     }
  18.  
  19.     const T& operator[](size_t index) const {
  20.         return stackvector_.at(index);
  21.     }
  22.  
  23.     auto begin() {
  24.         return stackvector_.begin();
  25.     }
  26.  
  27.     auto end() {
  28.         return stackvector_.begin() + size_array_;
  29.     }
  30.  
  31.     auto begin() const {
  32.         return stackvector_.begin();
  33.     }
  34.  
  35.     auto end() const {
  36.         return stackvector_.begin() + size_array_;
  37.     }
  38.  
  39.     size_t Size() const {
  40.         return size_array_;
  41.     }
  42.  
  43.     size_t Capacity() const {
  44.         return N;
  45.     }
  46.  
  47.     void PushBack(const T& value) {
  48.         if (size_array_ == N) {
  49.             throw std::overflow_error("Error: capacity is equal to the maximum size");
  50.         }
  51.         stackvector_[size_array_] = value;
  52.         ++size_array_;
  53.     }
  54.  
  55.     T PopBack() {
  56.         if (size_array_ == 0) {
  57.             throw std::underflow_error("Error: vector is empty");
  58.         }
  59.         T value = stackvector_[size_array_ - 1];
  60.         --size_array_;
  61.         return value;
  62.     }
  63.  
  64. private:
  65.     size_t size_array_;
  66.     std::array <T, N> stackvector_;
  67. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement