Класс queue

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

Синтаксис

template <class Type, class Container = deque <Type>>
class queue

Параметры

Type
Тип данных элемента для сохранения в queue.

Container
Тип базового контейнера, используемого для реализации queue.

Замечания

Элементы класса Type , указанные в первом параметре queue шаблона объекта, являются синонимами value_type и должны соответствовать типу элемента в базовом классе Container контейнеров, заданном вторым параметром шаблона. Необходимо Type назначить его, чтобы можно было копировать объекты этого типа и назначать значения переменным этого типа.

Подходящие базовые классы контейнеров для queue включения deque и list(или) любого другого frontконтейнера последовательности, поддерживающего операции , backpush_backи pop_front. Класс базового контейнера инкапсулирован в адаптер контейнера, который предоставляет только ограниченный набор функций-членов контейнера последовательностей в виде открытого интерфейса.

Объекты queue являются равными, если и только если элементы класса Type являются равными, и они меньше, чем сопоставимы, если и только если элементы класса Type меньше, чем сопоставимы.

Существует три типа адаптеров контейнеров, определенных стандартной библиотекой C++: stack, queueи priority_queue. Каждый ограничивает функциональность некоторого базового класса контейнеров для обеспечения точно управляемого интерфейса к стандартной структуре данных.

  • Класс stack поддерживает структуру данных последней версии (LIFO). Хороший аналог, который следует учитывать, будет стек плит. Элементы (тарелки) можно вставлять, проверять или удалять только из верхней части стека, которая является последним элементом в конце базового контейнера. Ограничение доступа только к верхнему элементу является причиной использования stack класса.

  • Класс queue поддерживает структуру данных fiFO. Хороший аналог, чтобы помнить, было бы люди выстраиваются для банковского рассеятеля. Элементы (люди) можно добавлять в конец очереди и удалять из начала очереди. Проверять можно как начало, так и конец очереди. Ограничение доступа только front к элементам и back элементам таким образом является причиной использования queue класса.

  • Класс priority_queue упорядочивает его элементы таким образом, чтобы самый большой элемент всегда был в верхней позиции. Он поддерживает вставку элемента, а также проверку и удаление верхнего элемента. Хорошим аналогом следует помнить, что люди выстраиваются, где они упорядочены по возрасту, высоте или другому критерию.

Участники

Конструкторы

Имя Описание
queue Создает queue, который является пустым или копией объекта базового контейнера.

Определения типов

Имя Описание
container_type Тип, предоставляющий базовый контейнер для изменения в queue.
size_type Целочисленный Typedef без знака, который может представлять число элементов в queue.
value_type Тип, представляющий тип объекта, который хранится в виде элемента в queue.

Функции

Имя Описание
back Возвращает ссылку на последний и наиболее недавно добавленный элемент в конец queue.
empty Проверяет, является ли queue пустым.
front Возвращает ссылку на первый элемент в начале queue.
pop Удаляет элемент из начала queue.
push Добавляет элемент в конец queue.
size Возвращает количество элементов в контейнере queue.

back

Возвращает ссылку на последний и наиболее недавно добавленный элемент в конец queue.

reference back();

const_reference back() const;

Возвращаемое значение

Последний элемент queueэлемента . Если значение queue пусто, возвращаемое значение не определено.

Замечания

Если возвращаемое значение back назначено объекту const_reference, queue объект нельзя изменить. Если возвращаемое значение back назначено объекту reference, queue объект можно изменить.

При компиляции с помощью _ITERATOR_DEBUG_LEVEL определенного значения 1 или 2 при попытке получить доступ к элементу в пустом queueвиде возникнет ошибка среды выполнения. Дополнительные сведения см. в разделе Checked Iterators .

Пример

// queue_back.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>

int main( )
{
   using namespace std;
   queue <int> q1;

   q1.push( 10 );
   q1.push( 11 );

   int& i = q1.back( );
   const int& ii = q1.front( );

   cout << "The integer at the back of queue q1 is " << i
        << "." << endl;
   cout << "The integer at the front of queue q1 is " << ii
        << "." << endl;
}

container_type

Тип, предоставляющий базовый контейнер для изменения.

typedef Container container_type;

Замечания

Этот тип является синонимом для параметра шаблона Container. Два класса контейнера последовательности стандартной библиотеки C++ ( list класс и класс по умолчанию deque ) соответствуют требованиям, которые необходимо использовать в качестве базового контейнера для queue объекта. Также можно использовать пользовательские типы, удовлетворяющие требованиям.

Дополнительные сведения см. в разделе "Примечания Container" раздела queue Class .

Пример

Пример объявления и использования container_typeсм. в примереqueue.

empty

Проверяет, пуст ли queue.

bool empty() const;

Возвращаемое значение

truequeue Значение , если queue значение не false является пустым.

Пример

// queue_empty.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>

int main( )
{
using namespace std;

   // Declares queues with default deque base container
   queue <int> q1, q2;

   q1.push( 1 );

   if ( q1.empty( ) )
      cout << "The queue q1 is empty." << endl;
   else
      cout << "The queue q1 is not empty." << endl;

   if ( q2.empty( ) )
      cout << "The queue q2 is empty." << endl;
   else
      cout << "The queue q2 is not empty." << endl;
}
The queue q1 is not empty.
The queue q2 is empty.

front

Возвращает ссылку на первый элемент в начале queue.

reference front();

const_reference front() const;

Возвращаемое значение

Первый элемент queueэлемента . Если значение queue пусто, возвращаемое значение не определено.

Замечания

Если возвращаемое значение front назначено объекту const_reference, queue объект нельзя изменить. Если возвращаемое значение front назначено объекту reference, queue объект можно изменить.

Функция-член возвращает reference первый элемент управляемой последовательности, который должен быть непустим.

При компиляции с помощью _ITERATOR_DEBUG_LEVEL определенного значения 1 или 2 при попытке получить доступ к элементу в пустом queueвиде возникнет ошибка среды выполнения. Дополнительные сведения см. в разделе Checked Iterators .

Пример

// queue_front.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>

int main() {
   using namespace std;
   queue <int> q1;

   q1.push( 10 );
   q1.push( 20 );
   q1.push( 30 );

   queue <int>::size_type i;
   i = q1.size( );
   cout << "The queue length is " << i << "." << endl;

   int& ii = q1.back( );
   int& iii = q1.front( );

   cout << "The integer at the back of queue q1 is " << ii
        << "." << endl;
   cout << "The integer at the front of queue q1 is " << iii
        << "." << endl;
}

pop

Удаляет элемент из начала queue.

void pop();

Замечания

Для queue применения функции-члена должна быть непустимая. Верхняя queue часть — позиция, занятая последним добавленным элементом и является последним элементом в конце контейнера.

Пример

// queue_pop.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>

int main( )
{
   using namespace std;
   queue <int> q1, s2;

   q1.push( 10 );
   q1.push( 20 );
   q1.push( 30 );

   queue <int>::size_type i;
   i = q1.size( );
   cout << "The queue length is " << i << "." << endl;

   i = q1.front( );
   cout << "The element at the front of the queue is "
        << i << "." << endl;

   q1.pop( );

   i = q1.size( );
   cout << "After a pop the queue length is "
        << i << "." << endl;

   i = q1. front ( );
   cout << "After a pop, the element at the front of the queue is "
        << i << "." << endl;
}
The queue length is 3.
The element at the front of the queue is 10.
After a pop the queue length is 2.
After a pop, the element at the front of the queue is 20.

push

Добавляет элемент в конец queue.

void push(const Type& val);

Параметры

val
Элемент, добавленный в задней queueчасти.

Замечания

Задняя часть queue — это позиция, занятая последним добавленным элементом и последним элементом в конце контейнера.

Пример

// queue_push.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>

int main( )
{
   using namespace std;
   queue <int> q1;

   q1.push( 10 );
   q1.push( 20 );
   q1.push( 30 );

   queue <int>::size_type i;
   i = q1.size( );
   cout << "The queue length is " << i << "." << endl;

   i = q1.front( );
   cout << "The element at the front of the queue is "
        << i << "." << endl;
}
The queue length is 3.
The element at the front of the queue is 10.

queue

Создает queue, который является пустым или копией объекта базового контейнера.

queue();

explicit queue(const container_type& right);

Параметры

right
Контейнер const , из которого создается копия queue .

Замечания

Базовый контейнер по умолчанию для queue .deque Можно также указать как базовый контейнер, но нельзя указать listvector, так как он не имеет требуемой pop_front функции-члена.

Пример

// queue_queue.cpp
// compile with: /EHsc
#include <queue>
#include <vector>
#include <list>
#include <iostream>

int main( )
{
   using namespace std;

   // Declares queue with default deque base container
   queue <char> q1;

   // Explicitly declares a queue with deque base container
   queue <char, deque<char> > q2;

   // These lines don't cause an error, even though they
   // declares a queue with a vector base container
   queue <int, vector<int> > q3;
   q3.push( 10 );
   // but the following would cause an error because vector has
   // no pop_front member function
   // q3.pop( );

   // Declares a queue with list base container
   queue <int, list<int> > q4;

   // The second member function copies elements from a container
   list<int> li1;
   li1.push_back( 1 );
   li1.push_back( 2 );
   queue <int, list<int> > q5( li1 );
   cout << "The element at the front of queue q5 is "
        << q5.front( ) << "." << endl;
   cout << "The element at the back of queue q5 is "
        << q5.back( ) << "." << endl;
}
The element at the front of queue q5 is 1.
The element at the back of queue q5 is 2.

size

Возвращает количество элементов в контейнере queue.

size_type size() const;

Возвращаемое значение

Текущая длина queue.

Пример

// queue_size.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>

int main( )
{
   using namespace std;
   queue <int> q1, q2;
   queue <int>::size_type i;

   q1.push( 1 );
   i = q1.size( );
   cout << "The queue length is " << i << "." << endl;

   q1.push( 2 );
   i = q1.size( );
   cout << "The queue length is now " << i << "." << endl;
}
The queue length is 1.
The queue length is now 2.

size_type

Целочисленный Typedef без знака, который может представлять число элементов в queue.

typedef typename Container::size_type size_type;

Замечания

Тип является синонимом базового size_type контейнера, адаптированного с помощью .queue

Пример

Пример объявления и использования size_typeсм. в примереqueue::front.

value_type

Тип, представляющий тип объекта, который хранится в виде элемента в queue.

typedef typename Container::value_type value_type;

Замечания

Тип является синонимом базового value_type контейнера, адаптированного с помощью .queue

Пример

// queue_value_type.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>

int main( )
{
using namespace std;

   // Declares queues with default deque base container
   queue<int>::value_type AnInt;

   AnInt = 69;
   cout << "The value_type is AnInt = " << AnInt << endl;

   queue<int> q1;
   q1.push(AnInt);
   cout << "The element at the front of the queue is "
        << q1.front( ) << "." << endl;
}
The value_type is AnInt = 69
The element at the front of the queue is 69.

См. также

Потокобезопасность в стандартной библиотеке C++
Справочник по стандартной библиотеке C++