Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Задание 2.
- Усовершенствовать класс Очередь, Queue https ://pastebin.com/CavnuaiZ избавившись от "тяжелого" смещения копированием всех элементов при извлечении элемента с головы очереди. Динамическую память выделять не надо! Решение может добавлять переменные-члены к классу.
- #include <iostream>
- template <typename ElemT, size_t size>
- class Queue
- {
- ElemT storage[size];
- int backPosition;
- int frontPosition;
- static const int emptyQueue{ -1 };
- public:
- Queue() : backPosition{ emptyQueue }, frontPosition{ 0 } {}
- size_t getSize()const { return size; }
- bool empty()const { return backPosition == emptyQueue or frontPosition > backPosition; }
- bool full()const { return backPosition == size - 1; }
- ElemT& front() { return storage[0]; }
- const ElemT& front()const { return storage[0]; }
- size_t getfront()const { return frontPosition; }
- size_t getback()const { return backPosition; }
- 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);
- ++frontPosition;
- 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{ queue.getfront() }; 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 << queue;
- }
- for (size_t i{ 0 }; i<4; ++i)
- {
- queue.pop();
- std::cout << queue;
- }
- std::cout << "Dequeue...\n";
- for (; !queue.empty() and queue.getfront() <= queue.getback(); queue.pop())
- {
- std::cout << queue;
- }
- std::cout << queue;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement