Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- template <typename ElemT, size_t size>
- class Queue
- {
- ElemT storage[size];
- int backPosition;
- static const int emptyQueue{ -1 };
- public:
- Queue() : backPosition{ emptyQueue } {}
- size_t getSize()const { return size; }
- bool empty()const { return backPosition == emptyQueue; }
- bool full()const { return backPosition == size - 1; }
- ElemT& front() { return storage[0]; }
- const ElemT& front()const { return storage[0]; }
- bool push(const ElemT& elem)
- {
- if (!full())
- {
- storage[++backPosition] = elem;
- return true;
- }
- return false;
- }
- bool pop()
- {
- if (!empty())
- {
- for (size_t i{ 1 }; i <= backPosition; storage[i - 1] = storage[i], ++i);
- --backPosition;
- return true;
- }
- return false;
- }
- template <typename ElemT, size_t size>
- friend std::ostream& operator<<(std::ostream& out, const Queue<ElemT, size>& queue);
- };
- template <typename ElemT, size_t size>
- std::ostream& operator<<(std::ostream& out, const Queue<ElemT, size>& queue)
- {
- if (!queue.empty())
- {
- out << "[ ";
- for (size_t i{ 0 }; i <= queue.backPosition; ++i)
- {
- out << queue.storage[i] << ' ';
- }
- out << " ]\n";
- }
- else
- {
- out << "[empty]\n";
- }
- return out;
- }
- int main()
- {
- Queue<int, 8> queue;
- std::cout << queue;
- std::cout << "Enqueue...\n";
- for (size_t i{ 0 }; !queue.full(); ++i)
- {
- queue.push(i);
- std::cout << i << '\n';
- }
- std::cout << "Dequeue...\n";
- for (; !queue.empty(); queue.pop())
- {
- std::cout << queue.front() << '\n';
- }
- queue.pop();
- std::cout << queue;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement