当前位置: 首页 > article >正文

stack_queue:三个关键注意事项解析

一、stack与容器

template<class T, class Container>
class stack
{
private:
    Container _con;
};

Container 为容器,在实例化创建对象时,我们可以传 vector<T>list<T> 等作为栈的底层。

举例:

int main()
{
  stack<int, vector<int>> st1;
  stack<int, list<int>> st2;

  return 0;
}

二、queue 和 priority_queue 的底层封装

  • queue 不支持用 vector 封装

queue 的原则是先进先出,使用过程中存在大量“头删”——pop_front(),用 vector 进行封装效率太低,故通常借助 list 进行模拟实现

  • priority_queue 不支持用 list 封装

优先队列 priority_queue 的本质是“堆”(默认建大堆),在插入和删除时,通常会涉及向上调整建堆向下调整建堆的方法——大量 [] 重载的使用。

list 不支持 [] 的重载,故 priority_queue 不支持底层使用 list。

三、仿函数

在C++中,仿函数通常是一个类或结构体,在类中通过重载 operator() 实现,其实例化对象可以像函数一样被调用

less<T> 就是一个仿函数——从根往叶子节点看,数值/优先级 越来越小,因此默认为大堆;如果我们传 greater<T> —— 从根往叶子节点看,数值/优先级 越来大,则建小堆。

	template<class T>
	class less
	{
	public:
		bool operator()(const T& a, const T& b)
		{
			return a > b;
		}
	};

	template<class T>
	class greater
	{
	public:
		bool operator()(const T& a, const T& b)
		{
			return a < b;
		}
	};

因为要建大堆,当子节点的数值/优先级比父节点大时——_con[child] > _con[parent],要将子节点向上调整


http://www.kler.cn/a/227193.html

相关文章:

  • 智能分析网关V4+EasyCVR视频融合平台——高速公路交通情况的实时监控和分析一体化方案
  • JavaGUI之SWT框架【阶段练习】
  • 在WORD中设置公式居中编号右对齐设置方式
  • 编程笔记 html5cssjs 079 JavaScript 循环语句
  • 代码随想录算法训练营|day25
  • 2024 AI 前端:回首展望,光芒未至,破晓之前!
  • 科普类——双目视觉在自动驾驶中存在的问题、挑战以及解决方案(三)
  • Linux基础知识总结(包含各种命令详解)
  • 未来电话呼叫技术的社会影响与发展趋势----云微呼
  • Python 数据分析(PYDA)第三版(一)
  • Open CASCADE学习|拓扑变换
  • vit细粒度图像分类(九)RAMS-Trans学习笔记
  • ChatGPT高效提问—基础知识(NLP)
  • 政安晨:示例演绎Python的函数与获取帮助的方法
  • vscode无法ssh远程连接到服务器:远程主机可能不符合 glibc 和 libstdc++ VS Code 服务器的先决条件
  • 01神经网络的理论及实现
  • 【开源】SpringBoot框架开发大学计算机课程管理平台
  • LeetCode第 123 场双周赛个人题解
  • 网络原理-TCP/IP(5)
  • Matplotlib箱形图的绘制与高级技巧解析【第57篇—python:Matplotlib箱形图】