STL中堆的应用

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
int a[100];
bool cmp(int a,int b)
{
     return a>b;
}
int main()
{
//-------------------------------------------------
//建堆,make_heap(&first,&last) 范围:[first,last)。 
    for (int i=0;i<=11;i++) scanf("%d",&a[i]);
    make_heap(&a[0],&a[12]); //大根堆 
    for (int i=0;i<=11;i++) printf("%d ",a[i]); cout<<endl;
    make_heap(&a[0],&a[12],cmp); //小根堆 
    for (int i=0;i<=11;i++) printf("%d ",a[i]); cout<<endl;
//-------------------------------------------------
//向堆中压入元素 push_heap(&first,&last),并调整堆。 范围:[first,last-1]。 
    a[12]=22; 
    push_heap(&a[0],&a[13],cmp); //小根堆。 
    for (int i=0;i<=12;i++) printf("%d ",a[i]); cout<<endl;
//-------------------------------------------------
//弹出堆顶的元素(将其置于数组的末尾,堆的范围右边界-1) pop_heap(&first,&last) 
//范围:[first,last-1]。 
    pop_heap(&a[0],&a[13],cmp);
    for (int i=0;i<=12;i++) printf("%d ",a[i]); cout<<endl; 
//-------------------------------------------------
//堆排序 sort_heap(&first,&last,cmp) 范围:[first,last)。 
    sort_heap(&a[0],&a[12],cmp);
    for (int i=0;i<=11;i++) printf("%d ",a[i]); cout<<endl; 
//-------------------------------------------------
    system("pause");
    return 0;
}

在网上看了很多,有的太乱,有的不实用,自己总结了一下。

转载于:https://www.cnblogs.com/ws-fqk/p/4498138.html

STL(Standard Template Library)是C++标准库中的一个重要组成部分,它提供了一系列的模板类和函数,用于实现常见的数据结构和算法。STL在实际项目中有广泛的应用,以下是一些常见的应用场景: 1. 列表(List):STL中的列表是一个双向链表,可以用于存储和操作一系列的元素。在实际项目中,列表常用于实现队列、栈和链表等数据结构。 2. 向量(Vector):STL中的向量是一个动态数组,可以自动调整大小。向量在实际项目中常用于存储和操作一系列的元素,特别适用于需要频繁访问和修改元素的场景。 3. (Heap):STL中的是一个优先队列,可以用于实现排序和优先级队列等算法。在实际项目中,常用于任务调度、事件处理和资源管理等场景。 4. 排序(Sort):STL中提供了多种排序算法,如快速排序、归并排序和排序等。排序算法在实际项目中常用于对数据进行排序和查找。 5. 搜索(Search):STL中提供了多种搜索算法,如二分查找和线性查找等。搜索算法在实际项目中常用于在有序数组或列表中查找特定元素。 6. 字符串匹配(String Matching):STL中提供了多种字符串匹配算法,如Boyer-Moore和Knuth-Morris-Pratt等。字符串匹配算法在实际项目中常用于文本搜索和模式匹配等场景。 STL应用不仅限于上述场景,它还可以用于图算法、数值计算、图形处理和网络编程等领域。通过使用STL,开发人员可以更高效地实现各种数据结构和算法,提高代码的可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值