C/C++算法编程竞赛标准模板库(STL)篇:队列(queue)

【C C++开源库】环形队列,消息队列库_开源 queue 库,5年经验Golang程序员面试27天 任务或者中断服务程序都可以给消息队列发送消息,当发送消息时,如果队列未满或者允许覆盖入队,FreeRTOS 会将消息拷贝到消息队列队尾,否则,会根据用户指定的阻塞超时时间进行阻塞,在这段时间中,如果队列一直不允许入队,该任务将保持阻塞状态以等待队列允许入队。当其它任务从其等待的队列中读取入了数据(队列未满),该任务将自动由阻塞态转移为就绪态。发送紧急消息的过程与发送消息几乎一样,唯一的不同是,当发送紧急消息时, 发送的位置是消息队列队头而非队尾,这样,接收者就能够优先接收到紧急消息,从而及时进行消息处理。 阅读详情

目录

前言

这个栏目是对我算法学习过程的同步记录,我也希望能够通过这个专栏加深自己对编程的理解以及帮助到更多像我一样想从零学习算法并参加竞赛的同学。在这个专栏的文章中我会结合在编程过程中遇到的各种问题并提出相应的解决方案。当然,如果屏幕前的你有更好的想法或者发现的错误也欢迎交流和指出!不喜勿喷!不喜勿喷!不喜勿喷!这章的内容非常重要!!那么事不宜迟,我们马上开始吧!

一、queue队列

1.基本介绍

2.queue的常用函数

二、priority_queue优先队列(堆)

1.基本介绍

2.priority_queue的常用函数

3.priority_queue修改比较函数

三、deque双端队列

1.基本介绍

2.deque的常用函数

四、综合练习

1.例题一:lanqiao OJ 1113

 2.例题二:lanqiao OJ 741

总结

我也从没想过STL中的queue还有这么多的花样。总而言之,如果你觉得这篇文章还不错,劳烦多多支持一下!码字不易,感谢你的观看!



前言

这个栏目是对我算法学习过程的同步记录,我也希望能够通过这个专栏加深自己对编程的理解以及帮助到更多像我一样想从零学习算法并参加竞赛的同学。在这个专栏的文章中我会结合在编程过程中遇到的各种问题并提出相应的解决方案。当然,如果屏幕前的你有更好的想法或者发现的错误也欢迎交流和指出!不喜勿喷!不喜勿喷!不喜勿喷!这章的内容非常重要!!那么事不宜迟,我们马上开始吧!

一、queue队列

1.基本介绍

queue是一种先进先出(FIFO)的数据结构。queue提供了一组函数来操作和访问元素,但它的功能相对简单。

下面是其结构示意图:

其中蓝色标识的是双端队列的函数操作,红色标识的是单向队列的函数操作。

queue的定义和结构如下:

template <class T, class Container = deque<T>>
class queue;

T表示存储在queue中元素的类型。

Container:表示底层容器的类型,默认为deque,也可以使用其他容器类型,如list,queue的内部实现了用底层容器来存储元素,并且只能通过特定的函数来访问和操作元素。

2.queue的常用函数

queue的常用函数表如下所示:

函数描述时间复杂度
push(x)在队尾弹出xO(1)
pop()弹出队首元素O(1)
front()返回队首元素O(1)
back()返回队尾元素O(1)
empty()检查队列是否为空O(1)
size()返回队列中元素的个数O(1)

二、priority_queue优先队列(堆)

1.基本介绍

priority_queue与普通的queue不同,其元素是按照一定的优先级进行排序的。默认情况下,priority_queue按照元素的值从大到小进行排序,即最大元素位于队列的前面。

priorty_queue的定义域结构如下,我们仅做了解即可。


template <class T, class Container = vector<T>, 
class Compare = less<typename Container::value_type>>
class priority_queue;

T表示存储在priority_queue中元素的类型。

Container:表示底层容器的类型,默认为vector,也可以使用其他容器类型,如deque。

Compare:表示元素之间的比较函数对象的类型,默认为less,即按照元素的值进行比较。priority_queue的内部实现了用底层容器来存储元素,并且只能通过特定的函数来访问和操作元素。

PS:priority_queue是一个十分重要的数据结构,考察频率极高。

2.priority_queue的常用函数

priority_queue的常用函数表如下所示:

函数描述时间复杂度
push(x)在栈顶推入元素xO(logN)
pop()弹出栈顶元素O(logN)
top()返回栈顶元素O(1)
empty()检查栈是否为空O(1)
size()返回栈中元素的个数O(1)

3.priority_queue修改比较函数

(1)通过仿函数修改比较函数,代码如下所示:

#include<bits/stdc++.h>
using namespace std;

struct Compare
{
	//重载()
	bool operator()(int a, int b)
	{
		//自定义的比较函数,按照从小到大(逆序)排列
		return a > b;
	}
};

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	priority_queue<int, vector<int>, Compare> pq;
	return 0;
}

(2)通过lambada表达式(匿名函数)修改比较函数。代码如下所示:

#include<bits/stdc++.h>
using namespace std;

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	auto compare = [](int a, int b)
	{
		return a > b;
	};
	priority_queue<int, vector<int>, decltype(compare)> pq(compare);
	return 0;
}

(3)如果priority_queue中的元素类型较简单,可以直接使用greater<T>来修改比较方式。

代码如下所示:

#include<bits/stdc++.h>
using namespace std;

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	priority_queue<int, vector<int>, greater<int>>pq;
	return 0;
}

std::greater函数对象定义在<functional.h>头文件中。

三、deque双端队列

1.基本介绍

deque(双端队列)是一种容器,它允许两端进行高效的插入和删除操作。后续算法中单调队列的实现需要依靠双端队列。单纯考察双端队列的题目并不多见。

2.deque的常用函数

deque(双端队列)的常用函数表如下所示:

函数描述时间复杂度
push_back(x)在尾部插入元素x平摊O(1)
push_front(x)在头部插入元素x平摊O(1)
pop_back()弹出尾部元素平摊O(1)
pop_front()弹出头部元素平摊O(1)
front()返回头部元素O(1)
back()返回尾部元素O(1)
empty()检查deque是否为空O(1)
size()返回deque中的元素个数O(1)
clear()清空deque中的所有元素O(N)
insert(pos, x)在pos处插入元素x平摊O(N)
erase(pos)移除指定位置pos处的元素平摊O(N)
erase(first, last)移除[first,last)范围内的元素平摊O(N)

PS:做后三个函数基本不会用到,感兴趣的可以自行了解。

四、综合练习

1.例题一:lanqiao OJ 1113

题目链接已给出:https://www.lanqiao.cn/problems/1113/learning/

参考代码如下:

#include <bits/stdc++.h>
using namespace std;
int main()
{
  ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
  queue<string>V,N;
  int M;cin >> M;
  while(M--)
  {
    string rec, name, channel;cin >> rec;
    if(rec == "IN")
    {
      cin >> name >> channel;
      if(channel == "V") V.push(name);
      else if(channel == "N") N.push(name);
    }
    else if(rec == "OUT")
    {
      cin >> channel;
      if(channel == "V")V.pop();
      else N.pop();
    }
  }
  while(V.size())
  {
    cout << V.front() << endl;
    V.pop();
  }
  while(N.size())
  {
    cout << N.front() << endl;
    N.pop();
  }
  return 0;
}

 2.例题二:lanqiao OJ 741

题目链接已经给出:https://www.lanqiao.cn/problems/741/learning/

参考代码如下:

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main()
{
  ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
  priority_queue<ll, vector<ll>,greater<ll>>pq;
  int n;cin >> n;
  for(int i=0;i<n;++i)
  {
    ll x;cin >> x;
    pq.push(x);
  }

  ll ans = 0;
  while(pq.size()>=2)
  {
    ll x = pq.top();pq.pop();
    ll y = pq.top();pq.pop();
    ans += x + y;
    pq.push(x + y);
  }
  cout << ans << endl;
  return 0;
}


总结

我也从没想过STL中的queue还有这么多的花样。总而言之,如果你觉得这篇文章还不错,劳烦多多支持一下!码字不易,感谢你的观看!
C with STL入门详解(适合初学者) 1.STL是什么? STL是Standard Template Library的简称,中文名标准模板库。简单来说就是封装好的一些组件。对于咱们考试而言,重要的有容器(containers)和算法(algorithms)两部分。 2.C with STL是什么? 字面意思,咱们考试用得上的C++其实就是C+STL,大一上我们已经学习了C语言课程,大二上我们已经学习了数据结构课程,有了这两门 阅读详情

相关推荐

ACM/ICPC 竞赛之STL简介

内容转载自:http://blog.youkuaiyun.com/muximuxi_kgsecond/article/details/8128613 ACM/ICPC 竞赛之STL简介 STL(Standard Template Library,标准模板库)是C++语言标准中的重要组成部分。STL 以模板类和模板函数的形式为程序员提供了各种数据结构和算法的精巧实现,程序员如果能够充分地利用STL,

WJ的专栏 1040

C++常用标准模板库——queue

queue queue就是队列,在STL中是实现了一个先进先出的容器,要使用queue,需要在加上queue这个头文件。 queue的定义,queue<typename> q;其中typename可以为任何类型或容器。 queue的访问,由于队列是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素,或是通过back()来访问队尾元素。 queue<`int`> q ; for(int i=1;i<5;i++){ ...

qq_62783783的博客 3539

C++STL容器的基本应用(新手入门向)

目录 前言: 最近整理了一下STL基本的三个容器(set,map,vector),这三个容器经常使用,其他到是还碰到过,可能是自己做的刷的题少吧23333,文章如果不正确的地方欢迎大家前来批评打脸。 STL介绍 iterator迭代器 set容器 pair容器 map容器 vector容器 STL是什么?STL(Standard Te...

Mr.zhou 2715

C++标准模板库之简单队列queue的实现和应用

1.概述 队列是逻辑上一维的线性数据结构。所以在队列的代码实现时候,很自然的采用一维数组来存储队列的元素。 队列是一种先进先出(First In First Out, FIFO)的线性表。 它只允许在一端执行插入操作,而在另一端执行删除操作。 允许执行插入操作的一端称为队尾,允许删除的一端称为队头。 由于在队列的实际运行中,发生频繁的进队和出队操作,需要设立队首head和队尾tail两个变量。head用于指示队首元素的位置,也就是队首元素在数组的位置下标。tail用于指示队尾元素的位置,也就是队尾元素在数组

weixin_43229348的博客 906

从C到C++:掌握STL与泛型编程,提升算法实现效率

在编程语言的学习路径中,从过程式语言转向支持多种范式的语言是提升开发效率的关键一步。C++在兼容C语言底层控制力的同时,引入了面向对象和泛型编程范式,其核心价值在于通过标准模板库(STL)提供高度优化的通用数据结构和算法。STL中的容器(如vector、map)和算法(如sort、find)基于泛型编程思想设计,实现了类型安全与代码复用,能显著减少重复编码工作。在算法竞赛和工程实践中,合理运用STL可以简化数据结构管理、优化算法实现,例如使用unordered_map实现O(1)查找,或通过priority

weixin_30363509的博客 352

csp信奥赛C++标准模板库STL(13):STL相关英语单词总结

csp信奥赛C++标准模板库STL(13):STL相关英语单词总结

王老师青少年编程 1468

C++学习笔记--STL标准模板库的认识与使用--序列式容器--squeue(队列)

1、创建方式: #include <queue> // queue构造 : 1. queue<Typename T> s; 2. queue<Typename T, Container> s; /* queue的 Container 需要满足有如下接口 : * back() * push_back() * pop_back() * 标准容器 std::vector / deque / list 满足这些要求 * 如使用 1 方式构造,默认容器使用 deque

有朋自远方来,不亦乐乎。 446

csp信奥赛C++标准模板库STL案例应用14

csp信奥赛C++标准模板库STL案例应用14

王老师青少年编程 654

【C++】stack和queue的经典题目&模拟实现@STL

本文介绍了栈(stack)和队列(queue)的基本概念,并通过三个经典题目展示了栈的实际应用。首先说明了stack是先进后出的容器适配器,不支持迭代器。然后详细讲解了: 最小栈问题 - 通过辅助栈在O(1)时间内获取最小值 栈的压入弹出序列 - 使用栈模拟给定的出入栈顺序 逆波兰表达式求值 - 利用栈计算后缀表达式 每个问题都给出了示例图解和对应的C++代码实现,体现了栈"后进先出"的特性在算法中的灵活运用。

浮光掠影 1693

深入解析DDR5 RFM机制:从JESD79-5标准到硬件实现

本文深入解析了DDR5内存标准中的关键机制——RFM(Refresh Management)。文章从JESD79-5标准出发,详细阐述了RFM如何通过RAA计数器实现从被动定时到主动响应的智能刷新管理,并探讨了其硬件实现细节、命令调度挑战及系统级设计考量,为芯片设计工程师优化DDR5内存子系统性能与可靠性提供了实践指导。

fff88的博客 487

prometheus 从入门到精通(史上最全)

Prometheus(由go语言开发)是一套开源的监控&报警&时间序列(按照时间排序)数据库的组合。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。它可以监控主机,服务,容器,支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。原文链接:https://blog.youkuaiyun.com/qq_45277554/article/details/130917620时间序列数据。

流水_鱼鱼的博客 1万+

【C++】蓝桥杯必备 算法竞赛常用STL万字总结

C++ STL标准库 常用函数总结 算法竞赛必备

Remember who you are! 4万+

深入解析Lora模块的工作原理与应用场景

本文深入解析了Lora模块的工作原理与应用场景。Lora模块作为物联网领域的核心无线通信组件,凭借其独特的扩频调制与半双工通信技术,实现了远距离、低功耗的数据传输。文章详细拆解了其技术内核,包括空中唤醒等低功耗奥秘,并提供了地址、信道、空中速率等关键参数的实战配置指南。最后,探讨了Lora模块在智能家居、智慧农业、城市监测等广域物联网场景中的具体应用,为开发者提供了从理论到实践的完整参考。

weixin_29174385的博客 333

C++算法竞赛中常用的STL

快考CSP了,C/C++的福利来了 首先介绍下,什么是STL。STL,Standard Template Library的缩写,标准模版库的意思。STL是一些“容器”的集合,这些容器包括list、 vector、set、queue等。 vector 动态数组 所谓动态数组,就是不定长数组。 头文件:#include<vector> 声明:vector<DataType> DataName; 基本操作: push_back();,在最后面插入一个新元素 size(),返回vect.

Leon14138的博客 3083

nnDetection实战:手把手教你用Python在自家电脑上跑通第一个肺结节检测模型

本文详细介绍了如何使用nnDetection框架在普通电脑上实现肺结节检测模型的搭建与运行。从环境配置、数据预处理到模型训练与推理,手把手教你完成医学图像检测的全流程,特别适合初学者入门医学AI领域。

weixin_32377497的博客 330

【nvidia-B200 生产环境】NVIDIA 570.124.06+Cuda12.8 Ubuntu22.04 nccl-test 一键部署脚本(免修改复制即用)

目录1. 初始化与日志记录2. 安装基础工具与配置更新3. NVIDIA 驱动安装 570.124.064. 安装 Mellanox OFED 24.10-2.1.8.05. 安装 CUDA 12.86. 安装 NCCL 和测试7. 配置 rc.local 和其他优化8. B200 单独步骤9. 最终测试与重启10. 完整生产脚本,复制即可直接使用总结 功能: 设置日志目录和日志文件路径。 使用 命令将标准输出和错误输出同时写入日志文件和终端。 记录脚本开始时间,并计算开始的秒数

jundao1997的专栏 2797

10min快速回顾C++语法(八)STL专题

⭐写在前面的话:本系列文章旨在短时间内回顾C/C++语法中的重点与易错点,巩固算法竞赛与写题过程中常用的语法知识,精准地解决学过但有遗忘的情况,为算法刷题打下坚实的基础。

timerring的博客 2万+

嵌入式SDIO 总线面试题及参考答案

SDIO 的 4 位总线模式是一种提高数据传输效率的工作模式。在传统的 1 位总线模式下,数据只能通过一根数据线(DAT0)进行传输,这限制了数据传输的带宽和速度。而在 4 位总线模式下,DAT0 - DAT3 这 4 根数据线同时用于数据传输,相当于在同一时间内可以传输 4 倍于 1 位模式的数据量,从而显著提高了数据传输的带宽和速度。要通过 CMD6 命令将 SDIO 总线从当前模式切换到 4 位总线模式,需要遵循以下步骤:第一步,主设备需要确保 SDIO 卡支持 4 位总线模式。

大模型大数据攻城狮的专栏 1718

从C语言的使用转换到C++(下篇)——刷题、竞赛篇

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。

weixin_67596609的博客 1406

Simulink仿真模块 - Data Type Conversion

Data Type Conversion将输入信号转换为指定的数据类型 在仿真库中的位置为: Simulink / 常用模块 Simulink / Signal Attributes 模型为: 说明 DataTypeConversion模块可将任何 Simulink®数据类型的输入信号转换为您指定的数据类型。 注意 要通过指定模块参数来控制输出数据类型,或者要从下游模块继承数据类型,使用DataTypeConversion模块。要...

jk_101的博客 2519

【教程4>第4章>第20节】基于FPGA的costas环整体实现与仿真测试

Costas 环是一种用于载波同步的闭环反馈控制系统,主要应用于通信系统中的相干解调。其基本原理是通过鉴相器(Phase Detector,PD)比较接收信号与本地载波信号的相位差,将这个相位差信息经过环路滤波器(Loop Filter,LF)滤波后,去控制数控振荡器(Numerically Controlled Oscillator,NCO)的输出频率和相位,使得本地载波能够跟踪接收信号的载波,最终实现载波同步。Costas 环环路滤波器在载波同步过程中起着不可或缺的作用。

FPGA/MATLAB学习教程/源码/项目合作开发 1263

ACM/ICPC竞赛之STL简介

ACM模版STL简介关于STLSTL(Standard Template Library,标准模版库)是C++语言标准中的重要组成部分。STL以模板类和模版函数的形式为程序员提供了各种数据结构和算法的实现,程序员吐过能够充分的利用STL,可以在代码空间、执行时间和编码效率上获得极大的好处。STL大致可以分为三大类:算法(algorithm)、容器(container)、迭代器(iterator)。S

逐梦者 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C++ STL 容器基本使用详解:

C++ STL 容器: C++ STL vector 容器 vector容器的概念 vector在英文中是矢量的意思。 我们知道,一个数组必须要有固定的长度,在开一个数组的时候,这个长度也就被静态地确定下来了。但是vector却是数组的“加强版”,对于一组数据来讲,你往vector里存多少数据,vector的长度就有多大。也就是说,我们可以将其理解为一个“变长数组”。 事实上,vector的实现方...

anana125的博客 5509

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

编程奇境:C++之旅,从新手村到ACM/OI算法竞赛大门(铠甲:STL)

在这个充满数据结构的世界,C++已经封装了很多迅速可用的数据结构。这就像我们身上的铠甲,不管遇到什么样的怪物,都能靠着这套铠甲防御攻击。

X_StarX的博客 1074

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

算法竞赛中常用的STL(c++)

c/c++算法竞赛中常用的STL

m0_74075257的博客 580

C++ STL(竞赛常用部分)

haha

不忘初心 3391
上一篇: C/C++算法编程竞赛标准模板库(STL)篇:栈(stack)
下一篇: C/C++算法编程竞赛标准模板库(STL)篇:set(集合)
BoFeather
博客等级 码龄5年 424粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值