Класс 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
контейнера последовательности, поддерживающего операции , back
push_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;
Возвращаемое значение
true
queue
Значение , если 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
Можно также указать как базовый контейнер, но нельзя указать list
vector
, так как он не имеет требуемой 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++