Работа с типом Queue

Работа с типом Queue

Тип Queue (очередь) – это контейнер, гарантирующий размещение элементов по правилу "первым прибыл – первым обслужен". К сожалению, люди сталкиваются с очередями повсеместно: очереди в банке, кинотеатре, по утрам к автомату, продающему кофе, и т.д. При моделировании сценариев, в которых элементы обрабатываются по правилу очереди, на помощь приходит System.Collections.Queue. Вдобавок к функциональным возможностям, обеспечиваемым поддерживаемыми интерфейсами, Queue определяет ряд членов, описанных в табл. 7.4.

Таблица 7.4. Члены типа Queue

Член Описание
Dequeue() Возвращает объект, находящийся в начале Queue, с одновременным его удалением
Enqueue() Добавляет объект в конец Queue
Peek() Возвращает объект, находящийся в начале Queue, без его удаления 

Чтобы проиллюстрировать возможности этих методов, снова используем нашу автомобильную тему и построим объект Queue, моделирующий очередь автомобилей перед въездом на мойку. Во-первых, предположим, что у нас есть следующий вспомогательный статический метод.

public static void WashCar(Car с) {

 Console.WriteLine("Моется {0}", с.petName);

}

Теперь рассмотрим следующий программный код.

static void Main(string[] args) {

 …

 // Создание очереди с тремя элементами.

 Queue carWashQ = new Queue();

 carWashQ.Enqueue(new Car ("Первая", 0, 1));

 carWashQ.Enqueue(new Car("Вторая", 0, 2));

 carWashQ.Enqueue(new Car("Третья", 0, 3));

 // Первая машина в очереди.

 Console.WriteLine("Первой в очереди является {0}", ((Сar)сarWashQ.Peek()).petName);

 // Удаление всех элементов из очереди.

 WashCar((Car)carWashQ.Dequeue());

 WashCar((Car)carWashQ.Dequeue());

 WashCar((Car)carWashQ.Dequeue());

 // Попытаемся удалить снова?

 try {WashCar((Car)carWashQ.Dequeue());}

 catch(Exception е) { Console.WriteLine("Ошибка: {0}", e.Message);}

}

Здесь в тип Queue с помощью метода Enqueue() вставляются три элемента. Вызов Реек() позволяет проверить, (но не удалить) первый элемент в текущем состоянии Queue, и таким элементом в данном случае является машина с именем Первая. Наконец, с помощью Dequeue() элемент из очереди удаляется и посылается во вспомогательную функцию WashСar() для обработки. Обратите внимание на то, что при попытке удаления элемента из пустой очереди среда выполнения генерирует исключение.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

6.5.8. Действие QUEUE

Из книги Iptables Tutorial 1.1.19 автора Andreasson Oskar

6.5.8. Действие QUEUE Действие QUEUE ставит пакет в очередь на обработку пользовательскому процессу. Оно может быть использовано для нужд учета, проксирования или дополнительной фильтрации пакетов.От переводчика: Далее автор пространно рассуждает о том, что обсуждение данной


Очередь (Queue)

Из книги Руководство по стандартной библиотеке шаблонов (STL) автора Ли Менг

Очередь (Queue) Любая последовательность, поддерживающая операции front, push_back и pop_front, может использоваться для модификации queue. В частности, могут использоваться list и deque.template ‹class Container›class queue { friend bool operator==(const queue‹Container›& х, const queue‹Container›& y); friend bool operator‹(const


Очередь с приоритетами (Priority queue)

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Очередь с приоритетами (Priority queue) Любая последовательность, с итератором произвольного доступа и поддерживающая операции front, push_back и pop_front, может использоваться для модификации priority_queue. В частности, могут использоваться vector и deque.template ‹class Container, class Compare = less‹Container::value_type›


Работа с типом ArrayList

Из книги VBA для чайников автора Каммингс Стив

Работа с типом ArrayList Тип ArrayList непременно станет для вас наиболее часто используемым типом пространства имей System.Collections, поскольку он позволяет динамически переопределять размеры содержимого. Для иллюстрации базовых возможностей этого типа предлагаем вам рассмотреть


Работа с типом Stack

Из книги C++ для начинающих автора Липпман Стенли

Работа с типом Stack Тип System.Collections.Stack представляет коллекцию, в которой элементы размещаются по правилу "последним прибыл – первым обслужен". Как и следует ожидать, Stack определяет члены с именами Push() и Pop() (для добавления элементов в стек и удаления их из стека). В следующем


Работа с типом DirectoryInfo

Из книги автора

Работа с типом DirectoryInfo Первым из рассматриваемых в нашем обсуждении типов, связанных с реализацией ввода-вывода и допускающих создание экземпляров, будет класс DirectoryInfo. Этот класс предлагает набор членов, используемых для создания, перемещения, удаления и перечисления


Работа с типом Directory

Из книги автора

Работа с типом Directory Теперь, когда вы увидели тип DirectoryInfo в действии, рассмотрим тип Directory. По большей части члены Directory "дублируют" функциональные возможности, обеспечиваемые членами уровня экземпляра DirectoryInfo. Напомним, однако, что члены Directory возвращают строковые типы, а


Работа с типом класса DriveInfo

Из книги автора

Работа с типом класса DriveInfo В .NET 2.0 пространство имен System.IO предлагает класс с именем DriveInfo. Подобно Directory.GetLogicalDrives(), статический метод DriveInfo.GetDrives() позволяет выяснить имена дисков машины. Однако, в отличие от Directory.GetLogicalDrives(), класс DriveInfo обеспечивает множество


Работа с типом File

Из книги автора

Работа с типом File Тип File предлагает функциональные возможности, почти идентичные возможностям типа FileInfo, но с помощью ряда статических членов. Подобно FileInfo, тип File предлагает методы AppendText(), Create(), CreateText(), Open(), OpenRead(), OpenWrite() и OpenText(). Во многих случаях типы File и FileStream


Работа с типом Timer

Из книги автора

Работа с типом Timer Напомним, что средняя часть строки состояния должна отображать текущее время или текущую дату, в зависимости от предпочтений пользователя.Первым шагом на пути к достижению этой цели является добавление в форму члена-переменной Timer – компонента,


Обработка информации, представленной пользовательским типом данных

Из книги автора

Обработка информации, представленной пользовательским типом данных После объявления переменной пользовательского типа ее можно "начинять" информацией. При этом необходимо присвоить значение каждому из элементов, составляющих тип.А для этого нужно идентифицировать


16.1.1. Определения шаблонов классов Queue и QueueItem

Из книги автора

16.1.1. Определения шаблонов классов Queue и QueueItem Ниже представлено определение шаблона класса Queue. Оно помещено в заголовочный файл Queue.h вместе с определением шаблона QueueItem:#ifndef QUEUE_H#define QUEUE_H// объявление QueueItemtemplate class T class QueueItem;template class Typeclass Queue {public:Queue() : front( 0 ), back ( 0 ) { }~Queue();Type&


16.3.1. Функции-члены шаблонов Queue и QueueItem

Из книги автора

16.3.1. Функции-члены шаблонов Queue и QueueItem Чтобы понять, как определяются и используются функции-члены шаблонов классов, продолжим изучение шаблонов Queue и QueueItem:template class Typeclass Queue {public:Queue() : front( 0 ), back ( 0 ) { }~Queue();Type& remove();void add( const Type & );bool is_empty() const {return front == 0;}private:QueueItem Type


16.4.1. Объявления друзей в шаблонах Queue и QueueItem

Из книги автора

16.4.1. Объявления друзей в шаблонах Queue и QueueItem Поскольку QueueItem не предназначен для непосредственного использования в вызывающей программе, то объявление конструктора этого класса помещено в закрытую секцию шаблона. Теперь класс Queue необходимо объявить другом QueueItem, чтобы