queue
類別
範本容器配接器類別,它針對某些基礎容器類型提供功能限制,限制存取前端和後端的項目。 元素可以加入後端或從前面移除,而且元素可以在 的任一端 queue
檢查。
語法
template <class Type, class Container = deque <Type>>
class queue
參數
Type
要存放在 queue
中的項目資料類型。
Container
用來實作的基礎容器型別 queue
。
備註
物件第一個queue
樣板參數中規定之類別Type
的元素與 同義value_type
,而且必須符合第二個樣板參數所規定之基礎容器類別Container
中的元素類型。 Type
必須可指派,才能複製該型別的物件,並將值指派給該類型的變數。
適用於 包含 deque
和的適用基礎容器類別queue
,或支援、back
、 push_back
和pop_front
作業front
的任何其他序列list
容器。 基礎容器類別會封裝在容器介面卡內,它只會公開有限的序列容器成員函式集做為公用的介面。
queue
如果和類別的元素相等可比較,而且只有在類別Type
的元素相等可比較時,而且只有在 類別的Type
元素小於可比較時,物件才會相等。
C++標準連結庫定義了三種類型的容器配接器: stack
、 queue
和 priority_queue
。 每個類型都會限制某些基礎容器類別的功能,以精確地提供標準資料結構受控制的介面。
類別
stack
支持最後一個先出 (LIFO) 資料結構。 記住的一個很好的類比是一堆盤子。 項目 (盤子) 可能會插入、檢查,或只從堆疊頂端移除,這是基底容器尾端的最後一個項目。 只存取 top 元素的限制是使用stack
類別的原因。類別
queue
支援先進先出 (FIFO) 數據結構。 記住的一個很好的模擬是人們排隊為銀行出納員。 項目 (人) 可能會加入隊伍的尾端,以及從隊伍的前面移除。 隊伍的前端和後端都可能會進行檢查。 以這種方式只front
存取 和back
元素的限制是使用queue
類別的原因。類別
priority_queue
會排序其元素,讓最大元素一律位於頂端位置。 它支援插入項目,以及檢查和移除頂端項目。 記住的一個很好的模擬是人們排隊,他們按年齡、身高或其他標準排列。
成員
建構函式
名稱 | 描述 |
---|---|
queue |
建構空的,或是基底容器物件複本的 queue 。 |
Typedefs
名稱 | 描述 |
---|---|
container_type |
提供基底容器以讓 queue 配接的類型。 |
size_type |
不帶正負號的整數類型,可以表示 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
,則為 , false
如果 為空,則 queue
為 。
範例
// 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
不帶正負號的整數類型,可以表示 queue
中的項目數。
typedef typename Container::size_type size_type;
備註
此類型與 所queue
調整之基底容器的 同義size_type
字。
範例
如需如何宣告和使用 size_type
的範例queue::front
,請參閱範例。
value_type
此類型代表儲存為 queue
項目的物件類型。
typedef typename Container::value_type value_type;
備註
此類型與 所queue
調整之基底容器的 同義value_type
字。
範例
// 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.