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; 开发工具&…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
