queue
队列,在STL中实现先进先出的容器。
1. 定义
使用queue,需要先添加头文件
#include <queue>
using namespace std;
基本定义格式:
queue<typename> name; //typename可以是任意基本数据类型或容器
2. 容器内元素的访问
queue本身是一种先进先出的限制性数据结构。
因此,在STL中只能通过front()来访问队首元素,或是通过back()来访问队尾元素。
int main(){
queue<int> q;
for(int i = 1; i < 5; i++){
q.push(i);//push(i)用以将i压入队列,因此依次入队1 2 3 4 5
}
printf("%d %d\n", q.front(), q.back());//输出结果是1、5
return 0;
}
3. queue常用函数
常用函数 | 常用函数用法 |
---|---|
push() | 元素入队,时间复杂度为 O ( 1 ) O(1) O(1) |
front() | 获取队首元素,时间复杂度为 O ( 1 ) O(1) O(1) |
back() | 获取队尾元素,时间复杂度为 O ( 1 ) O(1) O(1) |
pop() | 出队队首元素,时间复杂度为 O ( 1 ) O(1) O(1) |
enpty() | 检测queue是否为空,返回true则空,返回false则非空,时间复杂度为 O ( 1 ) O(1) O(1) |
size() | 返回queue内元素的个数,时间复杂度为 O ( 1 ) O(1) O(1) |
1. push()
元素入队,时间复杂度为 O ( 1 ) O(1) O(1)
2. front()
获取队首元素,时间复杂度为 O ( 1 ) O(1) O(1)
3. back()
获取队尾元素,时间复杂度为 O ( 1 ) O(1) O(1)
4. pop()
出队队首元素,时间复杂度为 O ( 1 ) O(1) O(1)
int main(){
queue<int> q;
for(int i = 1; i < 5; i++){
q.push(i);//push(i)用以将i压入队列,因此依次入队1 2 3 4 5
}
for(int i = 1; i < 4; i++){
q.pop();//出队首元素三次(即依次出队1 2 3)
}
printf("%d %d\n", q.front(), q.back());//输出结果是1、5
return 0;
}
5. empty()
检测queue是否为空,返回true则空,返回false则非空,时间复杂度为 O ( 1 ) O(1) O(1)
int main(){
queue<int> q;
if(q.empty() == true){//一开始队列内没有元素,所以为空
printf("Empty\n");
}else{
printf("Not Empty\n");
}
q.push(1);
if(q.empty() == true){//入队“1”,
printf("Empty\n");
}else{
printf("Not Empty\n");
}
return 0;
}
6. size()
返回queue内元素的个数,时间复杂度为 O ( 1 ) O(1) O(1)
int main(){
queue<int> q;
for(int i = 1; i < 5; i++){
q.push(i);//push(i)用以将i压入队列,因此依次入队1 2 3 4 5
}
printf("%d\n",q.size());//输出结果是5
return 0;
}