C++适配器

news/2024/11/7 14:33:49/

文章目录

  • 引言
    • 栈和队列
  • priority_queue
    • 仿函数
    • 迭代器区间

引言

栈的特性是先进后出,队列的特性是先进先出,然而双向队列同时具有栈和队列的特性,所以我们可以通过双向队列来适配出栈和队列。
先看库里面

栈和队列

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
stack和queue模板参数里面都有一个class Container = deque,就是说库里面在实现它们时默认是通过deque适配出来的。
比如stack的push底层其实是通过调用deque的push_back()实现的,pop底层是通过调用deque的pop_back()实现的
在这里插入图片描述

对于queue的push底层是通过调用deque的push_front()实现的,pop是通过调用deque的1pop_front()实现的
在这里插入图片描述

priority_queue

优先队列底层就是堆,使用数组实现的,所以我们可以使用容器vector适配出优先队列
在这里插入图片描述

仿函数

此外还有一个参数
class Compare = less
这个参数其实就是一个仿函数,什么是仿函数呢?就是把一个类对象像函数一样使用。怎么实现呢?底层就是把这个类重载了一个()运算符。在传这个参数时,我们可以自己实现一个仿函数去传,也可以使用库里面的
在这里插入图片描述
在这里插入图片描述
这两个是库里面包含的两个仿函数,用于比较大小,去排序,值得注意的是这里的less指的是升序,而greater是指降序
在这里插入图片描述

在这里插入图片描述
因此优先队列默认不传第二个参数的情况下,输出结果是升序

//仿函数/函数对象
//重载了括号,让类可以向函数一样被调用
template<class T>
class Less
{
public:bool operator()(const T& x, const T& y){return x < y;}
};template<class T>
class Greater
{
public:bool operator()(const T& x, const T& y){return x > y;}
};库里面
//template <class T> struct less : binary_function <T, T, bool> {
//	bool operator() (const T& x, const T& y) const { return x < y; }
//};
//
//template <class T> struct greater : binary_function <T, T, bool> {
//	bool operator() (const T& x, const T& y) const { return x > y; }
//};

迭代器区间

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

容器对象的构造函数还支持迭代器区间初始化,就是通过迭代器去迭代别的对象中存的值来对这个对象进行初始化。

template<class InputInterator>
priority_queue(InputInterator first, InputInterator last)
{//插入数据while (first != last){_con.push_back(*first);++first;}//建堆//从最后一个非叶子节点开始建堆-----关键for (int i = (_con.size()-1-1) / 2; i >= 0; i--){AdjustDown(i);}
}

http://www.ppmy.cn/news/1195657.html

相关文章

云安全-云原生k8s攻击点(8080,6443,10250未授权攻击点)

0x00 k8s简介 k8s&#xff08;Kubernetes&#xff09; 是容器管理平台&#xff0c;用来管理容器化的应用&#xff0c;提供快速的容器调度、弹性伸缩等诸多功能&#xff0c;可以理解为容器云&#xff0c;不涉及到业务层面的开发。只要你的应用可以实现容器化&#xff0c;就可以部…

el-select直接显示code不显示text的问题

设置的code值为integer&#xff0c;option的code值为string&#xff0c;所以选不中

python如何使用gspread读取google在线excel数据?

一、背景 公司使用google在线excel管理测试用例&#xff0c;为了方便把手工测试用到的测试数据用来做自动化用例测试数据&#xff0c;所以就想使用python读取在线excel数据&#xff0c;通过数据驱动方式&#xff0c;完成自动化回归测试&#xff0c;提升手动复制&#xff0c;粘…

[100天算法】-数组中的第 K 个最大元素(day 54)

题目描述 在未排序的数组中找到第 k 个最大的元素。请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k 2 输出: 5 示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k 4 输出: 4 说明:你可以假设 k 总…

thinkphp6 入门(11)-- 模板标签

新版框架默认只能支持PHP原生模板&#xff0c;如果需要使用thinkTemplate模板引擎&#xff0c;需要安装think-view扩展&#xff08;该扩展会自动安装think-template依赖库&#xff09;。 composer require topthink/think-view配置文件 安装完成后&#xff0c;在配置目录的vi…

[ubuntu]查看自己电脑硬件是否支持avx指令集

有时候paddlepaddle或者其他深度学习框架明显需要avx支持才能正常使用&#xff0c;因此知道电脑硬件是否支持avx很重要&#xff0c;那么怎么查看自己电脑是否支持avx指令集呢&#xff0c;很简单输入下面命令即可 grep -o -e sse4_2 -e avx -e sse4a -e avx2 /proc/cpuinfo

CC++动态内存分配与释放

C&C中内存分配分的方式有C语言方式和C方式两种&#xff0c;由于C兼容C&#xff0c;所以C的分配方式是可以 在C中使用。 C分配释放方式 在C中&#xff0c;动态内存分配和释放是通过使用new和delete关键字来完成的。 动态内存分配&#xff1a; 使用new关键字来分配动态内存…

C++ 模板特化

非类型模板参数 定义&#xff1a;对于函数模板和类模板&#xff0c;模板参数并不局限于类型&#xff0c;普通值也可以作为模板参数 非类型模板参数定义的是常量 template<typename T, size_t N> class array; //T&#xff1a;类型模板参数 //N&#xff1a;非类型模板参…