STL容器之queue
渔父·一棹春风一叶舟 - 五代·李煜
一棹春风一叶舟,一纶茧缕一轻钩。花满渚,酒满瓯,万顷波中得自由。
queue容器的概念
- queue容器是一种先进先出的数据结构FIFO(first in first out),它有两个出口。
- queue一端允许一端进入元素,称为队尾,允许一端移除元素,称为队头,这特别像排队的情形。
- queue中进数据称为入队,用push接口。
- queue中出数据称为出队,用接口pop。
queue容器构造函数和常用接口
queue的构造函数
- queue q1,默认构造
- 使用已有的容器构造,这个容器必须支持front,back,push_back,pop_front,通常可以使用deque和list。
- queue q2(q1)拷贝构造函数。
queue的常用接口
函数原型 | 用途 |
---|---|
push() | 往队尾添加元素 |
pop() | 从队头移除第一个元素 |
front() | 返回第一个元素 |
back() | 返回最后一个元素 |
empty() | 判断queue是否为空 |
size() | 判断queue是否为空 |
swap() | 两个queue交换 |
cpp
code:
#include <iostream>
#include <queue>
#include <deque>
using namespace std;
template<typename T>
void print_pop_stack(queue<T>& que) // 这里不能用const,因为内部pop改变了stack
{
while (!que.empty()) // 判断queue是否为空
{
cout << que.front() << " "; // 返回第一个元素
que.pop(); // 从队头移除第一个元素
}
cout << endl;
}
void test01()
{
deque<int> deq1{1, 2, 3};
queue<int> q1(deq1); // 使用已有容器构造
q1.push(10);
q1.push(20);
q1.push(30);
queue<int> q2(q1); // 拷贝构造
cout << "\n---------- q1 ----------" << endl;
cout << "q1.size(): " << q1.size() << endl;
print_pop_stack<int>(q1);
cout << "print_pop_stack后的q1.size(): " << q1.size() << endl;
cout << "q2.size(): " << q2.size() << endl;
cout << "q2.back():" << q2.back() << endl;
q2.swap(q1);
cout << "q2.size(): " << q2.size() << endl;
cout << "\n----------q2.swap(q1)后的q1 ----------" << endl;
print_pop_stack<int>(q1);
queue<int> q3;
q3 = q1; // queue中的=并未进行重载,无法直接赋值
cout << "\n---------- q3 = q1后的q1 ----------" << endl;
print_pop_stack<int>(q1);
}
int main()
{
test01();
system("pause");
return 0;
}
result:
---------- q1 ----------
q1.size(): 6
1 2 3 10 20 30
print_pop_stack后的q1.size(): 0
q2.size(): 6
q2.back():30
q2.size(): 0
----------q2.swap(q1)后的q1 ----------
1 2 3 10 20 30
---------- q3 = q1后的q1 ----------