c++常用库函数
一.sort排序
快排的改进算法,评价复杂度为(nlogn).
1.用法
sort(起始地址,结束地址下一位,*比较函数) [起始地址,结束地址) (左开右闭)
#include<bits/stdc++.h>
using namespace std;
int main()
{//sortvector<int> v;int x;while (cin >> x) v.push_back(x);sort(v.begin(), v.end());for (int num : v) cout << num << ' ';//范围forcout << endl;}
2.自定义函数
当sort没有默认参数时,默认为升序,如果想要改为降序,就需要自己写个函数,然后利用回调函数实现。
如果想要小于,参数为(int a,int b,cmp)返回值 return a>b 代表第一个数小于第二个数 即非升序
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a, int b)
{return a > b;
}
int main()
{//sortvector<int> v;int x;while (cin >> x) v.push_back(x);//使用while(cin>>x) 按ctrl+z停止加回车停止输入sort(v.begin(), v.end(),cmp);for (int num : v) cout << num << ' ';//范围forcout << endl;}
3.练习
对数组升序然后再降序。
#include<bits/stdc++.h>
using namespace std;
int main()
{//sortvector<int> v;int x;while (cin >> x) v.push_back(x);//使用while(cin>>x) 按ctrl+z停止加回车停止输入sort(v.begin(), v.end());for (int num : v) cout << num << ' ';//范围forcout << endl;for (int i = v.size()-1; i >= 0; i--) cout << v[i] << ' ';cout << endl;}
二.memset()
void*(void* p,int value,size_t num)用于初始化内存块的值,p是要填充的内存块,value为要设置的值(8位二进制数),num为字节数。
1.适用范围
memset是一个字节字节进行初始化的,所以如果你是一个整数比如1的话,那他的内存存储就会是00000001000000010000000100000001结果就会是一个很大的数,而不是每一个数都为1,但如是初始化一个字符数组,那字符数组每个字符都是1个字节那就刚刚好,整数只能是-1或0;
字符数组
#include<bits/stdc++.h>
using namespace std;
int main()
{char a[4];memset(a, '1', sizeof(a));//cout << a;//因为一开始没有对char初始化没有斜杠零 所以后面会输出烫烫for (int i = 0; i < 4; i++) cout << a[i];}
整型数组出现的情况(只能初始化为0和-1)
#include<bits/stdc++.h>
using namespace std;
int main()
{int a[4];memset(a, 1, sizeof(a));//cout << a;//因为一开始没有对char初始化没有斜杠零 所以后面会输出烫烫for (int i = 0; i < 4; i++) cout << a[i]<<' ';}
三.swap()
swap(T &a,T &b);
交换两个变量的值
int a=10;
int b=20;
swap(a,b);
四.reserve()
用于反转容器元素,reverse(first,last)[first,last),左闭右开
using namespace std;
int main()
{vector<int> v;int x;while (cin >> x) v.push_back(x);for (int num : v) cout << num << ' ';cout << endl;reverse(v.begin(), v.end());for (int num : v) cout << num<<' ';}
五.unique() 去重函数(唯一函数)
unique(first,last)[first,last)函数接受两参数:
first:指向要去重的第一个元素的迭代器;
endlast:最后一个元素的下一个
返回值返回去重后最后一个元素的下一个迭代器,比如122333排序完为123233,返回值就是123后的三的地址,之后使用erase就可以后面的那些多余元素。
#include<bits/stdc++.h>
using namespace std;
int main()
{vector<int> v = {1,2,2,3,3,3,4,4,4,4};auto it=unique(v.begin(), v.end());for (int num : v) cout << num << ' ';cout << endl;v.erase(it, v.end());for (int num : v) cout << num<<' ';}
六.next_permutation()和prev_permutation函数
next_permutation()和prev_permutation函数分别对应生成当前序列的下一个排列、上一个排列。next_permutation他按照字典序(即从大到小排序)对序列进行重新排列,如果存在下一个排列,则将当前序列改为下一个排序,并返回true,如果当前为最后一个排列,则改为第一个排列,并且返回false,prev_permutation及对应上一个排列,存在返回true,反之,改为第一个序列,并返回false。
练习
输出1234的所有全排列
#include<bits/stdc++.h>
using namespace std;
int main()
{vector<int> v = {1,2,3,4};bool flag = true;while (flag){for (int num : v) cout << num;cout << endl;flag = next_permutation(v.begin(), v.end());}//最后一个序列继续的话变为第一个序列cout << endl;//多空一行好分清for (int num : v) cout << num;cout << endl;}
七.binary_search和lower_bound和upper_bound
1.binary_search
binary_search是c++的标准库函数,通过二分查找算法(博客里有单独的一个讲解)来确定是否存在目标元素,返回值为bool
三个参数,第一个左闭右开[left,right),最后一个参数为目标值
#include<bits/stdc++.h>
using namespace std;
int main()
{ //binary_searchvector<int> v = {1,2,3,4};int target = 4;bool found = binary_search(v.begin(), v.end(), target);if (found) cout << "找到了" << endl;else cout << "没找到";
}
2.lower_boundn和upper_bound
lower_bound(first,end,x),区间仍为左闭右开,返回值为返回第一个大于等于x的元素地址(不是下标)。
upper_bound(first,end,x),区间也是左闭右开,返回值为第一个大于x的元素地址。
由于返回值是一个地址,想要得到下标,就必须减去首地址(v.begin())。
解释一下他们名字的含义,lower_bound名为下界,upper_bound为上界,当x为7时候,如下图
例子:
找第一个大于等于8的位置
#include<bits/stdc++.h>
using namespace std;
int main()
{ //binary_searchvector<int> v = {8,9,5,44,3};//二分查找的前提是单调,先进行排序sort(v.begin(), v.end());cout << (lower_bound(v.begin(), v.end(), 8)-v.begin());
}
相关文章:

c++常用库函数
一.sort排序 快排的改进算法,评价复杂度为(nlogn). 1.用法 sort(起始地址,结束地址下一位,*比较函数) [起始地址,结束地址) (左开右闭) #include<bits/stdc.h> using namespace std; int main() {//sortvector<int&g…...

CSS 网格布局
网格布局是一个二维布局系统,允许开发者以行和列的形式创建灵活的网络,并将内容放置在网络的单元格中。有些元素可能只占据网络的一个单元,另一些元素则可能占据多行或多列。 网格的大小既可以精确定义,也可以根据自身内容自动计…...

python实现屏幕录制,录音录制工具
python实现屏幕录制,录音录制工具 一,介绍 Python 实现的屏幕录制和录音录制工具是一个便捷的应用程序,旨在帮助用户同时捕捉计算机屏幕上的活动以及与之相关的音频输出。这个工具尤其针对教育工作者、内容创作者、技术支持人员以及任何需要…...

elementui 的 table 组件回显已选数据时候使用toggleRowSelection 方法的坑点
elementui 的 table 组件回显问题 "vue": "^2.7.16", "element-ui": "^2.15.14", 问题描述: 场景:首先我们是通过接口获取到数据之后 然后将返回的数据回显到表格上面 问题:直接将后端返回的数据…...

MATLAB基础应用精讲-【数模应用】负二项回归(附R语言和python代码实现)
目录 前言 几个高频面试题目 负二项回归、Probit回归如何选择 负二项回归 Probit回归 知识储备 逻辑回归 算法原理 多阈值负二项回归模型 模型及估计方法 负二项回归模型 多阈值负二项回归模型 分割阶段 精确估计阈值阶段 负二项回归的操作步骤 负二项回归…...

20240803 芯动科技 笔试
文章目录 1、单选题1.11.21.31.42、填空题2.12.23、问答题3.13.23.34、编程题4.14.24.3岗位:嵌入式软件工程师(25届校招)(J12042) 题型:4 道单选题,2 道填空题, 3 道简答题,3 道编程题 1、单选题 1.1 已知 5 个元素的出栈序列是 1,2,3,4,5,6 则对应的入栈顺序可能是 …...

如何将 ECharts 图表插入 HTML Canvas
在 Web 开发中,数据可视化是一个常见且重要的需求。ECharts 是一个强大的图表库,而 HTML5 Canvas 则提供了灵活的绘图能力。今天,我们将探讨如何将这两者结合起来,实现将 ECharts 生成的图表插入到 HTML Canvas 中的特定位置。 为…...

突破干扰,无人机自动驾驶技术详解
突破干扰的无人机自动驾驶技术,是一个结合了多学科领域的复杂系统,旨在确保无人机在复杂电磁环境、人为干扰等条件下仍能自主、安全地完成飞行任务。以下是对该技术的详细解析: 一、技术概述 无人机自动驾驶技术通过集成传感器技术、人工智…...

Xamarin学习计划
一、Xamarin 的产生历程 Xamarin 由 Nat Friedman 和 Miguel de Icaza 创立。它的出现主要是为了让开发者能够使用 C#语言来构建跨平台的移动应用程序。 Xamarin 提供了一种统一的开发方式,允许开发者使用熟悉的 C#语言和.NET 框架来开发同时适用于多个平台的应…...

exchange online邮件系统EAM双因素认证技术方案
exchange online邮件系统是指微软推出的电子邮件系统云服务,通常作为office 365和microsoft 365的一个子项目来提供服务。这样用户就不需要自己部署exchange邮件服务器,只需要订阅微软的云服务,然后就可以直接使用微软提供的exchange邮件服务…...

【数据结构与算法】栈和队列
文章目录 一.栈1.1定义 顺序栈和链式栈1.2基本操作1.2.1表示1.2.2初始化1.2.3清空1.2.4销毁1.2.5入栈1.2.6出栈1.2.7取栈顶 1.3共享栈1.3.1定义1.3.2进栈出栈 二.队列2.1定义 顺序队列和链式队列循环队列2.2基本操作2.2.1初始化2.2.2判空2.2.3求队列长度2.2.4取队头元素2.2.5销…...

基于php的图书管理系统
摘 要 随着互联网的发展,许多人都热衷于在线购物,无需离开家就可以获得所需的产品,通过简单的操作,就能够获得快速、准确的配送。 科技已然渗透到进社会的方方面面,让我们的学习、交流、工作变得无比轻松自如。由于…...

k8s Node节点维护
Kubernetes (K8s) 中对 Node 节点的维护是保证集群健康和性能的重要部分。Node 节点通常是 Kubernetes 工作负载的运行环境,负责运行 Pods。当需要对节点进行维护(如升级、修复问题、调整配置等)时,可能需要将该节点标记为不可用并…...

【航天宏图旗下的PIE engine】
航天宏图旗下的PIE engine是一个集实时分布式计算、交互式分析和数据可视化为一体的在线遥感云计算开放平台,以下是对其的详细介绍: 一、平台背景与定位 PIE-Engine地球科学引擎是航天宏图自主研发的一套基于容器云技术构建的面向地球科学领域的专业P…...

Python酷库之旅-第三方库Pandas(157)
目录 一、用法精讲 716、pandas.Timedelta.view方法 716-1、语法 716-2、参数 716-3、功能 716-4、返回值 716-5、说明 716-6、用法 716-6-1、数据准备 716-6-2、代码示例 716-6-3、结果输出 717、pandas.Timedelta.as_unit方法 717-1、语法 717-2、参数 717-3、…...

【原创】java+springboot+mysql校园表白墙网站设计与实现
个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…...

CSS学习(Grid布局和flex布局比较)
grid网格布局真香,比flex方便太多了,grid-template-columns用法 文章目录 flex布局的时候网格grid布局的时候可以修改某一列的像素可以修改某一列的宽度占比自适应屏幕分列让第一个元素长宽都占2个 flex布局的时候 最后一行不够4个的时候 最下面一行无法…...

RTThread-Nano学习二-RT-Thread启动流程
一、简介 上一章,我们已经了解了如何通过MDK来移植RTT,不熟悉的可以看如下链接:RTThread-Nano学习一-基于MDK移植-CSDN博客本章我们就来继续了解一下,RTT的启动流程。 二、启动流程 官方给了一幅非常清晰的启动流程图&am…...

排查sshfs挂载失败的问题
#排查sshfs挂载失败的问题 写代码在Linux上运行,但是熟悉的IDE(比如VS code)在自己的电脑上,可以使用sshfs把linux上的目录挂载到本地,再用VScode打开即可,可以使用下面的命令: sshfs -odebug…...

【002】基于Spring Boot+Unipp的古诗词学习小程序【原创】
一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端: 技术:框架Vue.js;UI库:ElementUI; 开发工具&…...

PageHelper循环依赖问题
1. 问题 2. 原因 项目中SpringBoot的版本为2.7.18。 SpringBoot2.6.x后不推荐使用循环依赖,也就是说从2.6.x版本开始,如果项目里还存在循环依赖,SpringBoot将拒绝启动! 3. 解决 去pageHelper github看,才看到新版本…...

k8s部署Kafka集群超详细讲解
准备部署环境 Kubernetes集群信息 NAMEVERSIONk8s-masterv1.29.2k8s-node01v1.29.2k8s-node02v1.29.2 Kafka:3.7.1版本,apche版本 Zookeeper:3.6.3版本 准备StorageClass # kubectl get sc NAME PROVISIONER RECLA…...

【数据采集工具】Sqoop从入门到面试学习总结
国科大学习生活(期末复习资料、课程大作业解析、大厂实习经验心得等): 文章专栏(点击跳转) 大数据开发学习文档(分布式文件系统的实现,大数据生态圈学习文档等): 文章专栏(点击跳转&…...

Matlab绘图总结(进阶)
本文在前文的基础上进一步整理画图方法 MATLAB画动图_CSDN博客 1. 基础图形绘制 1.1 rectangle(矩形,圆形) 在前文中,讲解了如何使用rectangle,rectangle本意是用来画矩形的,其中,Curvature可…...

QExcel 保存数据 (QtXlsxWriter库 编译)
QtXlsxWriter 是一个用于在 Qt 应用程序中创建和操作 Excel XLSX 文件的库。它提供了一个简单的 API,使开发者能够轻松地生成和修改 Excel 文件,而无需依赖 Microsoft Excel 或其他外部应用程序。支持初始化、写文件、读文件、格式设置、合并单元格、加粗…...

k8s ETCD数据备份与恢复
在 Kubernetes 集群中,etcd 是一个分布式键值存储,它保存着整个集群的状态,包括节点、Pod、ConfigMap、Secrets 等关键信息。因此,定期对 etcd 进行备份是非常重要的,特别是在集群发生故障或需要恢复数据的情况下。本文…...

【C语言】循环嵌套:乘法表
循环嵌套,外层循环执行一次,内层循环执行i次。分别控制 在循环的过程中加一层循环。 多层循环属于循环嵌套、嵌套循环 #include <stdio.h> #include <math.h> /* 功能:循环嵌套 乘法表 时间:2024年10月 地点…...

基于Java微信小程序的水果销售系统详细设计和实现(源码+lw+部署文档+讲解等)
详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…...

从0开始深度学习(11)——多层感知机
前面介绍了线性神经网络,但是线性模型是有可能出错的,因为线性模型意味着是单调假设,但是现实中往往很复杂。例如,我们想要根据体温预测死亡率。 对体温高于37摄氏度的人来说,温度越高风险越大。 然而,对体…...

SQL语句查询
SQL语句查询 查询产生一个虚拟表 看到的是表形式显示的结果,但结果并不真正存储 每次执行查询只是从数据表中提取数据,并按照表的形式显示出来 查询语法 SELECT <列名> FROM <表名> [WHERE <查询条件表达式>] SELECT …...