make_heap(), pop_heap(), push_heap()用法

2023-11-16

对make_heap(), pop_heap(), push_heap()的用法做个总结:
make_heap()生成堆,他有两个参数,也可以有三个参数,前两个参数是指向开始元素的迭代器和指向结束元素的下一个元素的迭代器。第三个参数是可选的,可以用伪函数less()和greater()来生成大顶堆和小顶堆,其中type为元素类型。如果只传入前两个参数,默认是生成大顶堆。
push_heap()是在堆的基础上进行数据的插入操作,参数与make_heap()相同,需要注意的是,只有make_heap()和push_heap()同为大顶堆或小顶堆,才能插入。
pop_heap()是在堆的基础上,弹出堆顶元素。这里需要注意的是,pop_heap()并没有删除元素,而是将堆顶元素和数组最后一个元素进行了替换,如果要删除这个元素,还需要对数组进行pop_back()操作。
若用make_heap(), pop_heap(), push_heap(),需要添加头文件 # include 。
用less ()和greater () 需要添加头文件 # include 。
这里只是描述用法,粘贴代码如下:

# include <iostream>
# include <functional>
# include <vector>
# include <algorithm>

using namespace std;

void printVec(vector<int> nums)
{
    for (int i = 0; i < nums.size(); ++i)
        cout << nums[i] << " ";
    cout << endl;
}
int main(void)
{
    int nums_temp[] = {8, 3, 4, 8, 9, 2, 3, 4};
    vector<int> nums(nums_temp, nums_temp + 8);
    cout << "sorce nums: ";
    printVec(nums);

    cout << "(默认)make_heap: ";
    make_heap(nums.begin(), nums.end());
    printVec(nums);

    cout << "(less)make_heap: ";
    make_heap(nums.begin(), nums.end(), less<int> ());
    printVec(nums);

    cout << "(greater)make_heap: ";
    make_heap(nums.begin(), nums.end(), greater<int> ());
    printVec(nums);

    cout << "此时,nums为小顶堆" << endl;;
    cout << "push_back(3)" << endl;
    nums.push_back(3);
    cout << "忽略第三个参数,即为默认)push_heap: ";
    push_heap(nums.begin(), nums.end());
    printVec(nums);
    cout << "第三个参数为greater: ";
    push_heap(nums.begin(), nums.end(), greater<int>());
    printVec(nums);
    cout << "(做替换)pop_heap: ";
    pop_heap(nums.begin(), nums.end());
    printVec(nums);
    cout << "pop_back(): ";
    nums.pop_back();
    printVec(nums);
}

结果为:
堆的运行结果
这个是为了记录如何用堆,若有不对之处,敬请指正。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

make_heap(), pop_heap(), push_heap()用法 的相关文章

随机推荐

  • Uniapp录音实时回调原生插件-YL-AudioRecorder

    YL AudioRecorder 插件地址 https ext dcloud net cn plugin id 14028 升级版 YL AudioRecorderPlus 支持mp3录制及实时回调 https ext dcloud net
  • 30条经典的SQL语句

    关于索引 推荐转载的这篇文章 http blog csdn net dutguoyi archive 2006 01 10 575617 aspx 改善SQL语句的效率 http community csdn net Expert topi
  • 2017年严重拖延着患者欠下的债

    扩展基础知识面 Android 面试 全站式导航 http mp weixin qq com s fTfudY1DBYS5JiSkPnbjAg 100篇精选干货 感谢你与码个蛋共同成长 含5重福利 http mp weixin qq com
  • 使用com.alibaba里面的druid连接数据库

    1 添加依赖
  • Spark性能调优之Shuffle调优

    Spark性能调优之Shuffle调优 Spark底层shuffle的传输方式是使用netty传输 netty在进行网络传输的过程会申请堆外内存 netty是零拷贝 所以使用了堆外内存 shuffle过程中常出现的问题 常见问题一 redu
  • 服务器物理结构,物理 I/O 体系结构

    物理 I O 体系结构 与以前发行版的 M 系列服务器相比 这些服务器的物理 I O 体系结构发生了变化 使用了不同的名称 并且 CPU 不再拥有 PCIe 结构 I O 术语 用于描述 I O 体系结构的术语发生了如下变化 根联合体 在
  • React Effects(副作用)

    我们在之前提到过 React 组件在渲染过程中不应该有可观察到的副作用 但是有些时候副作用确实必要的 我们也许需要进行管理 focus 状态 用 canvas 画图 订阅数据源等操作 在 React 中 这些都可以通过声明 effect 来
  • ag-grid 自带css样式记录

    本篇文章是打算自己用于记录ag grid自身的css样式的记录和功能 1 ag header group cell with group 作用 多表头 前几层 最后一行表头除外 表头样式的设置 ag header group cell wi
  • pg备份数据库

    原文 http www weijingbiji com 1975 PostgreSQL备份工具pg dump和pg dumpall PostgreSQL 数据库 作者 viking PostgreSQL使用 pg dump 和 pg dum
  • [知识图谱实战篇] 七.HTML+D3实现关系图谱搜索功能

    前面作者讲解了很多知识图谱原理知识 包括知识图谱相关技术 Neo4j绘制关系图谱等 但仍缺少一个系统全面的实例 为了加深自己对知识图谱构建的认识 为后续创建贵州旅游知识图谱打下基础 作者深入学习了张宏伦老师的网易云课程 星球系列电影 并结合
  • Python利用demoji库删除文档中的表情符号

    在进行数据清洗时 往往需要删除文档中的出现的表情符号 因为他们无法被读取 借助demoji库 可以非常简单地完成这项工作 关于demoji 库的文档 可以访问demoji PyPI 首先 需要在环境中利用pip install安装demoj
  • 可拖拽的easyui treegrid

    引用 JQuery EasyUI TreeGrid控件的使用 支持拖拽与禁止拖拽 演示
  • 实际的机械臂控制(9)Moveit单独控制机械臂末端在XYZ三个轴的平移和旋转(基于python)

    0 序言 在moveit中 控制机械臂的末端执行器运动的API有两个 分别是 shift pose target set pose target 第一个API shift pose target 其实这个函数在旋转角度这块并不会得到让大家满
  • flutter 中stack 控件的 大小是如何确定的

    stack 控件 stack 是我们在flutter中常用到的控件 然而stack的大小是如何确定的是一个值得探究的问题 自己在网上也进行了搜索 但是总是不能解释自己遇到的新情况 所以我这里就根据目前的经验对stack大小是如何确定的进行一
  • 泰森多边形(Voronoi图)生成算法

    一 文档目的 本文描述了在geomodel模块中 生成泰森多边形所使用的算法 二 概述 GIS和地理分析中经常采用泰森多边形进行快速插值 和分析地理实体的影响区域 是解决邻接度问题的又一常用工具 荷兰气候学家A H Thiessen提出了一
  • 软件构架、架构和框架的区别

    软件框架 Software Framework 介绍 面向某领域 包括业务领域 如ERP 和计算领域 如GUI 的 可复用的 半成品 软件 它实现了该领域的共性部分 并提供一系列定义良好的可变点以保证灵活性和可扩展性 可以说 软件框架是领域
  • 重新学javaweb---ServletContext

    WEB容器在启动时 它会为每个WEB应用程序都创建一个对应的ServletContext对象 它代表当前web应用 这个对象创建出来之后就一直在内存中驻留 代表当前的web应用 它可以通过我们上一篇介绍的ServletConfig对象获取
  • arm-linux-gcc char与signed char和unsigned char

    1 三者关系 1 ANSI C 提供了3种字符类型 分别是char signed char unsigned char 而不是像short int一样只有两种 int默认就是unsigned int 2 三者都占1个字节 3 signed
  • 不规则语法命名数据框tibble

    本题来自 R数据科学 第7章使用tibble实现简单数据框 4 在以下的数据框中练习如何引用不符合语法规则的变量名 a 提取名称为 1 的变量 b 绘制表示变量 1 和变量 2 关系的散点图 c 创建一个名称为 3 的新列 其值为列 2 除
  • make_heap(), pop_heap(), push_heap()用法

    对make heap pop heap push heap 的用法做个总结 make heap 生成堆 他有两个参数 也可以有三个参数 前两个参数是指向开始元素的迭代器和指向结束元素的下一个元素的迭代器 第三个参数是可选的 可以用伪函数le