STL中那些好用的东西!(持续更新)

2023-05-16

一、数据结构部分

1、set&map(后续持续更新)

2、queue(priority_queue)

queue<int> a;    //定义 
a.push(i);       //压入 
a.pop();         //弹出 
a.size();        //取大小 
a.front();       //访问队首元素 
a.back();        //访问队尾元素 
**************************************************/

/*****************priority_queue******************* 
priority_queue<int,vector<int>,greater<int> > c;  //定义从小到大的int类型的优先队列
priority_queue<int> c;                            //定义从大到小的int类型的优先队列 
c.push();        //压入 
c.pop();         //弹出队首元素 
c.top();         //访问队首元素 
//如是结构体必须重载'<' 
**************************************************/

/**********************deque***********************
deque<int> b;    //定义双端队列 
b.push_front(2); //在队首压入元素 
b.push_back(3);  //在队尾压入元素 
b.pop_front();   //弹出队首元素 
b.pop_back();    //弹出队尾元素 
b.size();        //取大小 
b.back();        //访问队尾元素
b.front();       //访问队首元素 
//可用[]访问 

3、stack

/**********************stack***********************
stack<int> d;    //定义 
d.push(1);       //压入元素 
d.pop();         //弹出栈顶元素 
d.top();         //访问栈顶元素 
d.size();        //取大小 

二、#include< algorithm >

很多很扯但是非常实用的函数这里面都包含了,这里就只是列举几个。

1、sort(快速排序,cmp用法详解)

这里我写这篇博客的其中一个目的就是了结了cmp中“<”和“>”符号混用的这一个问题,同时也了解bool operator(符号重定义)的用法。

(1)cmp

咱们先上一道例题来看一下:

题目链接:
YBT1178 成绩排序

我们在使用cmp函数时,要注意以下规则:

1、假设放在cmp函数前面的就是当前放在队列前面的。

2、你要使cmp函数表示的意思是,我的队如果这样排那么就return true;否则 return false;

这样子想是不是感觉简单太多了。

那么下面我们就来一个源代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct student
{
    char name[22];
    int lenn,scr;
}a[105];
bool cmp(student a1,student b1)
{//一定要记住a1在队中一定是排在b1前面的,下面我们就要用cmp对这样的排序进行检查,看一下这样排是否合法 
    if(a1.scr>b1.scr) return true;
    //此时a1.scr>b1.scr(在本题中成绩要求从大到小排)所以合法,输出正确! 
    if(a1.scr==b1.scr&&strcmp(a1.name,b1.name)<0) return true;
    //此时a1.scr==b1.scr(在本题中如果成绩相等,那么就按字典序对名字进行排名),如果此时a名字的字典序小于b那么这样排合法,输出正确! 
    return false;
    //除此之外,其他的都不合法,输出错误!!! 
}
int n;
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;++i)
    {
        scanf("%s%d",a[i].name,&a[i].scr);
        a[i].lenn=strlen(a[i].name);
    }
    sort(a,a+n,cmp);//注意sort里面的cmp函数不需要加入()!!! 
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<a[i].lenn;++j)
        {
            printf("%c",a[i].name[j]);
        }
        printf(" %d\n",a[i].scr);
    }
    return 0;
}

(2)bool operator

这个操作叫做重定义符号(一般排序的时候是重新定义小于符号,更多关于此玩意儿的实际用法可以见我的博客的有几篇文章中有所提及)

这里良心给几个链接:

Dijsktra priority!

开车,开车!!!

拓展:结构体中的函数:

线段树2对于Pushdown的理解

2、random_shuffle(随机洗牌)

随机洗牌函数,用法同初级sort函数,非常好用!

3、swap(交换)

交换函数,相信大家都会觉得交换这东西应该比较好实现,但是一个长代码中一直写自己写的交换,应该也会被写煩,所以这个东西某种意义上来说还是有他的存在价值的。

4、unique(相邻去重)

这也是一个很神奇的函数,他是可以把一个数列中挨在一起相同的数提取出来,然后把他扔到数列的末尾,从而实现去重功能。可以搭配sort实现很好的去重排序。那有些朋友就可能会问,那我怎么知道最后我输出来的东西是什么,我如何判断这个队列后面那些是被扔出来的重复部分。这个问题不用担心,因为unique去重完后自己返回一个去重完毕后的队列的尾指针!

下面是一个实现了用unique进行去重排序的程序:

#include<cstdio>
#include<algorithm>
using namespace std;
int a[1000];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;++i)
    {
        scanf("%d",&a[i]);
    }
    sort(a,a+n);
    int ans=unique(a,a+n)-a;//一定要从0开始 
    for(int i=0;i<ans;++i)
    {
        printf("%d ",a[i]);
    }
    return 0;
}
/*
6
2 4 3 4 2 6
*/ 

5、像那些全排列函数等不常用的就先略过啦~

6、lower_bound&upper_bound

lower_bound就是求出一个有序区间找出ai>=k,的最小指针;(因为他用的是二分搜索,所以肯定比自己for一遍找要快很多),upper_bound就是求出ai>k的最小指针,琢磨一下还是会发现很有用的!

后续持续更新!
(因为写这篇博客unique函数部分时,我被那个指针搅得死去活来,所以后续我还有可能会发出一些关于指针的博客,欢迎关注!!!)

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

STL中那些好用的东西!(持续更新) 的相关文章

随机推荐

  • socket编程——UDP协议(C语言编程)

    1 收发信息 ssize t sendto int socket void message size t length int flags struct sockaddr dest addr socklen t dest len 返回值 l
  • 【C语言之线性表链式存储结构】

    C语言之线性表链式存储结构 文章目录 C语言之线性表链式存储结构前言一 线性表链式存储结构定义二 相关概念1 结点1 头指针 三 代码描述1 单链表结点定义1 单链表的创建2 单链表的查找3 在单链表中 xff0c 替换某一个位置的数据4
  • unsigned char* (uchar*) 转为QImage

    场景 xff1a 有一副图像 xff0c 事先已经因为各种需要被读取到了内存中 xff0c 且不可再根据路径读取 xff0c 只能读取内存中的数据转为QImage 百度过好久 xff0c 没有一个帖子说的特别详细 xff0c 解释的特别清楚
  • 卷积的含义-详解

    原文链接 xff1a 点击此处看知乎原文 最近需要用到卷积对图像进行处理 xff0c 不明白卷积的含义 xff0c 找资料的时候在知乎找到一个很优秀的评论 xff0c 特此记录一下 以下内容来自于原文复制 xff1a 对卷积的困惑 卷积这个
  • 图像处理-直方图均衡化(C++实现,不依赖opencv)

    近来接触图像处理领域 xff0c opencv入门之后 xff0c 想自己动手实现一些算法 xff0c 先从直方图均衡化开始吧 xff01 我使用的图像文件是只包含数据yuv格式图像 xff0c 以后等需要的时候再处理从普通格式 xff08
  • 图像处理-Sobel边缘检测(C++实现,不依赖opencv)

    边缘检测一直是图像处理中比较热门的一块 xff0c 今天简单实现了下sobel算法 先上图 xff1a 原图 xff1a Sobel处理 彩图 xff1a Sobel处理 灰度图 xff1a 可以看到在不复杂的情况下 xff0c Sobel
  • 图像处理-高斯滤波和升级版Side Window版高斯滤波(C++实现,无需opencv)

    图像处理绕不开的一个环节就是去燥 xff0c 去掉各式各样的噪声来保证图像的质量 今天将高斯滤波实现了下 xff0c 在此稍作记录 以往惯例 xff0c 先上图 xff1a 原图 xff1a 高斯滤波 xff1a Side Window版高
  • Linux下,使用nginx+ffmpeg+video.js实现直播效果(含centos7环境配置步骤)

    前言 近来因为项目需要 xff0c 需要做一个把视频解码然后推流 xff0c 在浏览器播放的功能 然后查资料 找demo xff0c 最终决定使用FFmpeg 43 nginx来完成相应功能 xff0c 过程颇为心酸 xff0c 在此做下笔
  • 使用QMap保存数据时,若出现相同的键,可以在不改变原有的变量存储选型基础上,使用insertMulti函数来解决

    场景 问题发生场景解决办法方案一方案二方案三 xff08 重点 xff09 针对方案三的示例 问题发生场景 本来项目中选型选择的是QMap来存储相应的键值对 xff0c 根据Map中的键的顺序取出对应的值 但是在使用的过程中 xff0c 发
  • C语言,声明和实现放在头文件中

    将头文件和实现放在同一个文件中 普通函数与静态函数是有区别的 静态函数 xff1a static h ifndef CRND INCLUDE CRND H define CRND INCLUDE CRND H static int pore
  • C++的编译过程详解

    C C 43 43 编译过程 C C 43 43 编译过程主要分为4个过程 编译预处理编译 优化阶段汇编过程链接程序 一 编译预处理 xff08 1 xff09 宏定义指令 xff0c 如 define Name TokenString x
  • BA(Basic authentication)认证实践

    1 概念介绍 Basic authentication xff1a 是一种最简单的对Web资源进行访问控制的方法 xff0c 属应用层的安全保障手段 常用的签名算法有 xff1a base64 HmacSHA1 1 xff09 优点 xff
  • 累加校验和C语言实现

    发送方 xff1a 对要数据累加 xff0c 得到一个数据和 xff0c 对和求反 xff0c 即得到我们的校验值 然后把要发的数据和这个校验值一起发送给接收方 接收方 xff1a 对接收的数据 包括校验和 进行累加 xff0c 如果得到0
  • C++项目工程在Linux环境开发、部署和运行问题

    背景 当我们自己开发的项目程序需要在linux上进行部署 调试时 xff0c 项目代码完整拷贝过去之后 xff0c 直接运行我们自己的可执行程序 xff0c 往往提示找不到所相关的 so库 xff0c 会报错 这是因为 xff0c 系统只会
  • Jetson Xavier NX上安装ROS、Cartographer、基于D435i的Yolov5+TensorRT7的流程及问题解决

    主要记录下自己在Jetson Xavier NX上运行ROS Cartographer 基于D435i的Yolov5 43 TensorRT的系统环境配置流程 xff0c 经过了无数次在ARM上的安装 xff0c 这次是最流畅的一次环境配置
  • 计算机进制转换:二进制、八进制、十进制、十六进制

    一 什么是进制 在生活中 xff0c 我们通常都是使用阿拉伯数字计数的 xff0c 也就是10进制 xff0c 以10为单位 xff0c 遇10进一 xff0c 所以是由0 xff0c 1 xff0c 2 3 4 5 6 7 8 9组成的
  • 摘要认证,使用HttpClient实现HTTP digest authentication

    文章目录 前言一 四个过程二 过程细节三 HttpClient 代码示例 前言 今天工作需要做了摘要认证 xff08 digest authentication xff09 xff0c 下面就工作中遇到的问题及过程做一个总结 一 四个过程
  • C语言之带参数的宏

    这两天在学习C语言 xff0c 发现宏定义挺有意思 xff0c 可以减少代码量 带参宏定义 的一般形式为 define 宏 名 形参表 字符串 带参宏调用 的一般形式为 xff1a 宏 名 实参表 xff1b define M X Y X
  • visual studio升级

    visual studio升级 概述升级步骤温馨提示 概述 有时处于开发要求或者安全要求 xff0c 需要将visual studio升级到最新的版本 本篇文章记录一下如何升级 升级步骤 1 找到visual studio的安装路径下的安装
  • STL中那些好用的东西!(持续更新)

    一 数据结构部分 1 set amp map xff08 后续持续更新 xff09 2 queue xff08 priority queue xff09 queue lt int gt a 定义 a push i 压入 a pop 弹出 a