队列
利用数组模拟
手写
- 清空
void clear(){
r=l;
}
- 判断队列是否为空
bool empty(){
return l==r;//1为空
}
- 把整数 x 插入队尾
void push(int x){
a[r]=x;
r++;
}
4.队首元素出队列
void pop(){
l++;
}
- 获取队首元素的值。
int front(){
return a[l];
}
例子
STL 封装函数
定义
queue<类型(可以为接构体,队列)> 函数名
使用函数
q.empty() 如果队列为空返回true,否则返回false
q.size() 返回队列中元素的个数
q.pop() 删除队列首元素但不返回其值
q.front() 返回队首元素的值,但不删除该元素
q.push() 在队尾压入新元素
q.back() 返回队列尾元素的值,但不删除该元素
详解
- 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 &other_q):将当前 queue 中的元素和参数
- queue 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。
例子
#include<bits/stdc++.h>
using namespace std;
queue<int>s1;
queue<int>s2;
int main(){
int m,n,k;
scanf("%d %d %d",&m,&n,&k);
for(int i=1;i<=m;i++) s1.push(i);
for(int i=1;i<=n;i++) s2.push(i);
while(k--){
printf("%d %d\n",s1.front(),s2.front());
s1.push(s1.front());
s2.push(s2.front());
s1.pop();
s2.pop();
}
return 0;
}
使用两对列分别输出
2. Blah数集
#include<bits/stdc++.h>
using namespace std;
queue<long long> s1,s2,s3;
int main(){
int a,b,c,n;
scanf("%d %d",&a,&n);
s1.push(a);
int tot=0;
while(tot<n){
tot++;
b=s1.front()*2+1;
c=s1.front()*3+1;
s2.push(b);
s3.push(c);
if(s2.front()<s3.front()) s1.