Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- template <typename ElemT, int sizeP>
- class Queue
- {
- ElemT storage[sizeP];
- int backPosition;
- int frontPosition;
- int count;
- public:
- Queue() : backPosition{ 0 }, frontPosition{ 0 }, count{0} {};
- int size() const { return sizeP; };
- bool empty() const { return count == 0; };
- bool full() const { return count == sizeP; };
- const ElemT& front() const { return storage[frontPosition]; };
- const ElemT& back() const { return backPosition - 1 < 0 ? storage[sizeP - 1] : storage[backPosition-1]; };
- bool push(const ElemT& elem)
- {
- if (!full())
- {
- storage[backPosition] = elem;
- ++backPosition %= sizeP;
- //backPosition = ++backPosition % sizeP;
- ++count;
- return true;
- }
- return false;
- }
- bool pop()
- {
- if (!empty())
- {
- ++frontPosition %= sizeP;
- --count;
- return true;
- }
- return false;
- }
- template <typename ElementType, int size>
- friend std::ostream& operator<<(std::ostream& out, const Queue<ElementType, size>& queue);
- };
- template <typename ElementType, int size>
- std::ostream& operator<<(std::ostream& out, const Queue<ElementType, size>& queue)
- {
- if (!queue.empty())
- {
- out << "[ ";
- for (int front{ queue.frontPosition }, cnt{0}; cnt < queue.count; ++front%=queue.size(), ++cnt)
- {
- out << queue.storage[front] << ' ';
- }
- out << " ]\n";
- }
- else
- {
- out << "[empty]\n";
- }
- return out;
- };
- int main()
- {
- Queue<int, 7> queue;
- std::cout << "Queue: " << queue << '\n';
- std::cout << "Pushing into queue..\n";
- for (int i{ 0 }; !queue.full(); ++i)
- {
- queue.push(i);
- std::cout << queue.back() << '\n';
- std::cout << "Queue: " << queue << '\n';
- };
- std::cout << "Popping from queue..\n";
- while (!queue.empty())
- {
- std::cout << queue.front() << ' ';
- queue.pop();
- std::cout << "Queue: " << queue << '\n';
- }
- std::cout << "Queue: " << queue << '\n';
- std::cout << '\n';
- std::cout << queue.front() << ' ';
- std::cout << queue.front() << ' ';
- }
Advertisement
Add Comment
Please, Sign In to add comment