Little_hobbit

queue.cpp

Sep 3rd, 2020
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1. #include "queue.h"
  2. #include <cstring>
  3. #include <algorithm>
  4.  
  5. // Деструктор очереди
  6. Queue::~Queue()
  7. {
  8.     delete[] _queue;
  9. }
  10.  
  11. // Конструктор
  12. Queue::Queue(size_t size) : _size(size + 1), _queue(new int[_size]), _tail(0), _head(0) {}
  13.  
  14. // Конструктор копирования
  15. Queue::Queue(Queue const& other) : _size(other._size), _queue(new int[_size]), _tail(other._tail), _head(other._head)
  16. {
  17.     memcpy(_queue, other._queue, _size);
  18. }
  19.  
  20. bool Queue::isEmpty()
  21. {
  22.     return _head == _tail;
  23. }
  24.  
  25. // Метод push
  26. // Если не было найдено свободного места в очереди, то возвращает 0
  27. // иначе добавляет в очередь и возвращает 1
  28. int Queue::push(int data)
  29. {
  30.     size_t oldtail = _tail;
  31.     _tail = (_tail + 1) % _size;
  32.  
  33.     if (_tail != _head)
  34.     {
  35.         _queue[oldtail] = data;
  36.         return 1;
  37.     }
  38.     _tail = oldtail;
  39.     return 0;
  40. }
  41.  
  42. // Метод pop
  43. int Queue::pop()
  44. {
  45.     if (!this->isEmpty())
  46.     {
  47.         _head = (_head + 1) % _size;
  48.         return 1;
  49.     }
  50.     return 0;
  51. }
  52.  
  53. // Метод front для получения данных первого элемента очереди
  54. const int& Queue::front()
  55. {
  56.     return _queue[_head];
  57. }
  58.  
  59. // Оператор обмена очередей
  60. void Queue::swap(Queue & other)
  61. {
  62.     std::swap(this->_queue, other._queue);
  63.     std::swap(this->_head, other._head);
  64.     std::swap(this->_tail, other._tail);
  65.     std::swap(this->_size, other._size);
  66. }
  67.  
  68. // Оператор присваивания
  69. Queue& Queue::operator=(Queue const& other)
  70. {
  71.     if (this != &other)
  72.     {
  73.         Queue(other).swap(*this);
  74.     }
  75.     return *this;
  76. }
Add Comment
Please, Sign In to add comment