Advertisement
avr39ripe

PV913StaticSimpleQueueTemplate

Jul 8th, 2020
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. template <typename ElemT, int sizeP>
  4. class Queue
  5. {
  6.     ElemT storage[sizeP];
  7.     int backPosition;
  8.     static const int emptyQueue{ -1 };
  9. public:
  10.     Queue() : backPosition{ emptyQueue } {};
  11.     int size() const { return sizeP; };
  12.     bool empty() const { return backPosition == emptyQueue; };
  13.     bool full() const { return backPosition == sizeP - 1; };
  14.     const ElemT& front() const { return storage[0]; };
  15.     const ElemT& back() const { return storage[backPosition]; };
  16.  
  17.     bool push(const ElemT& elem)
  18.     {
  19.         if (!full())
  20.         {
  21.             storage[++backPosition] = elem;
  22.             return true;
  23.         }
  24.         return false;
  25.     }
  26.  
  27.     bool pop()
  28.     {
  29.         if (!empty())
  30.         {
  31.             for (int i{ 1 }; i <= backPosition; ++i)
  32.             {
  33.                 storage[i - 1] = storage[i];
  34.             }
  35.             --backPosition;
  36.             return true;
  37.         }
  38.         return false;
  39.     }
  40.  
  41.     template <typename ElementType, int size>
  42.     friend std::ostream& operator<<(std::ostream& out, const Queue<ElementType, size>& queue);
  43. };
  44.  
  45. template <typename ElementType, int size>
  46. std::ostream& operator<<(std::ostream& out, const Queue<ElementType, size>& queue)
  47. {
  48.     if (!queue.empty())
  49.     {
  50.         out << "[ ";
  51.         for (int i{ 0 }; i <= queue.backPosition; ++i)
  52.         {
  53.             out << queue.storage[i] << ' ';
  54.         }
  55.         out << " ]\n";
  56.     }
  57.     else
  58.     {
  59.         out << "[empty]\n";
  60.     }
  61.     return out;
  62. };
  63.  
  64.  
  65. int main()
  66. {
  67.     Queue<int, 7> queue;
  68.     std::cout << queue;
  69.  
  70.     std::cout << "Pushing into queue..\n";
  71.     for (int i{ 0 }; !queue.full(); ++i)
  72.     {
  73.         queue.push(i);
  74.         std::cout << queue.back() << '\n';
  75.     };
  76.  
  77.     std::cout << "Popping from queue..\n";
  78.     while (!queue.empty())
  79.     {
  80.         std::cout << queue.front() << ' ';
  81.         queue.pop();
  82.     }
  83.     std::cout << queue.front() << ' ';
  84.     std::cout << queue.front() << ' ';
  85.  
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement