#pragma once #include #include template class Queue { private: std::queue> q; public: void push(T* data) { q.push(std::unique_ptr(data)); } T* pop() { if (q.empty()) return nullptr; T* data = q.front().release(); q.pop(); return data; } T* top() { return q.empty() ? nullptr : q.front().get(); } bool empty() { return q.empty(); } void clear() { while (!q.empty()) q.pop(); } int count() { return static_cast(q.size()); } };