进击高手【第二期】(STL)

队列

利用数组模拟

手写

  1. 清空
void clear(){
   
	r=l;
}
  1. 判断队列是否为空
bool empty(){
   
	return l==r;//1为空
}
  1. 把整数 x 插入队尾
void push(int x){
   
	a[r]=x;
	r++;
}

4.队首元素出队列

void pop(){
   
	l++;
}
  1. 获取队首元素的值。
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() 来完成同样的操作。

例子

  1. 周末舞会
#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.push(s2
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值