Advertisement
lil_SV

Untitled

Sep 23rd, 2021
848
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdexcept>
  3.  
  4. template<class T>
  5. class ringBuffer{
  6. public:
  7.     ringBuffer(const size_t& size) // аргумент size является обязательным
  8.     :_size(size)
  9.     ,_begin(0)
  10.     ,_end(0)
  11.     ,_isEmpty(true)
  12.     ,_array(new T[size])
  13.     {
  14.         if(size<1){
  15.             throw std::invalid_argument("size should be more 0");
  16.         }
  17.     }
  18.  
  19.     ~ringBuffer(){
  20.         delete [] _array;
  21.     }
  22.  
  23.     void push(const T& val){  // добавление элемента
  24.         if(_begin==_end && !_isEmpty){
  25.             throw std::invalid_argument("ringBuffer is full");
  26.         }
  27.         _isEmpty=false;
  28.         _array[_end]=val;
  29.         _end=(_end+1)%_size;
  30.     }
  31.  
  32.     void pop(){ // удаление элемента
  33.         if(_isEmpty){
  34.             throw std::invalid_argument("ringBuffer is empty");
  35.         }
  36.         _begin=(_begin+1)%_size;
  37.         if(_begin==_end){
  38.             _isEmpty=true;
  39.         }
  40.     }
  41.  
  42.     T getFirst()const{ // возвращает первый элемент
  43.         if(_isEmpty){
  44.             throw std::invalid_argument("ringBuffer is empty");
  45.         }
  46.         return _array[_begin];
  47.     }
  48.  
  49.     T getLast()const{ // возвращает последний элемент
  50.         if(_isEmpty){
  51.             throw std::invalid_argument("ringBuffer is empty");
  52.         }
  53.         return _array[(_end==0)?(_size-1):(_end-1)];
  54.     }
  55.  
  56.     bool isEmpty()const{ // пуст ли буффер
  57.         return _isEmpty;
  58.     }
  59.  
  60.     bool isFull()const{ // заполнен ли буффер
  61.         return _begin==_end && !_isEmpty;
  62.     }
  63.  
  64. private:
  65.     size_t _size; // размер массива
  66.     size_t _begin; // первый элемент
  67.     size_t _end; // элемент, следующий за последним элементов
  68.     bool _isEmpty; // пуст ли массив
  69.     T*_array; // массив
  70. };
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement