queue
只能訪問 queue<T>
容器介面卡的第一個和最後一個元素。只能在容器的末尾新增新元素,只能從頭部移除元素。
queue 的生成方式和 stack 相同,下面展示如何建立一個儲存字串物件的 queue:
queue<string> words;
也可以使用複製建構函式:
queue<string> copy_words {words};
stack<T>
、queue<T>
這類介面卡類都預設封裝了一個 deque<T>
容器,也可以透過指定第二個模板型別引數來使用其他型別的容器:
queue<string, list<string>>words;
底層容器必須提供這些操作:front()、back()、push_back()、pop_front()、empty() 和 size()。
queue 操作
queue 和 stack 有一些成員函式相似,但在一些情況下,工作方式有些不同:
front()
:返回 queue 中第一個元素的引用。如果 queue 是常量,就返回一個常引用;如果 queue 為空,返回值是未定義的。back()
:返回 queue 中最後一個元素的引用。如果 queue 是常量,就返回一個常引用;如果 queue 為空,返回值是未定義的。push(const T& obj)
:在 queue 的尾部新增一個元素的副本。這是透過呼叫底層容器的成員函式push_back()
來完成的。push(T&& obj)
:以移動的方式在 queue 的尾部新增元素。這是透過呼叫底層容器的具有右值引用引數的成員函式push_back()
來完成的。pop()
:刪除 queue 中的第一個元素。size()
:返回 queue 中元素的個數。empty()
:如果 queue 中沒有元素的話,返回 true。emplace()
:用傳給 emplace() 的引數呼叫 T 的建構函式,在 queue 的尾部生成物件。swap(queue<T> &other_q)
:將當前 queue 中的元素和引數 queue 中的元素交換。它們需要包含相同型別的元素。也可以呼叫全域性函式模板swap()
來完成同樣的操作。
queue<T>
模板定義了複製和移動版的 operator=(),對於所儲存元素型別相同的 queue 物件,它們有一整套的比較運算子,這些運算子的工作方式和 stack 容器相同。
和 stack 一樣,queue 也沒有迭代器。訪問元素的唯一方式是遍歷容器內容,並移除訪問過的每一個元素。