当前位置: 首页 > article >正文

10-STL、位运算、常用函数库

1-STL

vector

vector是变长数组

//定义vector
vector<int>a;//第一维长233,第二维长度动态变化
vector<int>b[233];//自定义的结构体类型也可以保存在vector中
struct res{...};
vector<rec>c;//函数
a.size();//返回vector的实际长度(包含的元素个数)
a.empty();//返回一个bool类型,表明vector是否为空
a.clear();//把vector清空

迭代器
迭代器是一个类对象,它允许你在容器中按顺序访问元素。通过迭代器,你可以遍历容器而不需要关心容器的具体实现细节。可以类比为“指针”,用于指向容器的元素。

//一个保存int的vector的迭代器声明方法为
vector<int>::iterator it;
a.begin() //指向集合中最小元素的迭代器。a.end() //指向集合中最大元素的下一个位置的迭代器。a.front() //返回vector的第一个元素,等价于*a.begin() 和 a[0]。a.back() //返回vector的最后一个元素,等价于 a[a.size() – 1]。a.push_back(x) //把元素x插入到vector a的尾部。b.pop_back() //删除vector a的最后一个元素。

queue

#include 主要包括循环队列queue和优先队列priority_queue两个容器。

//定义
queue<int> q;
struct rec{}; queue<rec> q; 	//结构体rec中必须定义小于号
priority_queue<int> q;		// 大根堆
priority_queue<int, vector<int>, greater<int>> q;	// 小根堆
priority_queue<pair<int, int>>q;

循环队列 queue
push 从队尾插入
pop 从队头弹出
front 返回队头元素
back 返回队尾元素

优先队列 priority_queue
push 把元素插入堆
pop 删除堆顶元素
top 查询堆顶元素(最大值)

stack

//定义
stack<int> q;
struct rec{}; stack<rec> q; 	//结构体rec中必须定义小于号

push 向栈顶插入
pop 弹出栈顶元素

deque

双端队列deque是一个支持在两端高效插入或删除元素的连续线性存储空间。它就像vector和queue的结合。

[] 随机访问
begin/end,返回deque的头/尾迭代器
front/back 队头/队尾元素
push_back 从队尾入队
push_front 从队头入队
pop_back 从队尾出队
pop_front 从队头出队
clear 清空队列

set

#include 主要包括set和multiset两个容器,分别是“有序集合”和“有序多重集合”,即前者的元素不能重复,而后者可以包含若干个相等的元素。set和multiset的内部实现是一棵红黑树,它们支持的函数基本相同。

set<int> s;
struct rec{}; set<rec> s;	// 结构体rec中必须定义小于号
multiset<double> s;//函数
a.size();//返回vector的实际长度(包含的元素个数)
a.empty();//返回一个bool类型,表明vector是否为空
a.clear();//把vector清空

迭代器
begin是指向集合中最小元素的迭代器。

end是指向集合中最大元素的下一个位置的迭代器。

insert把一个元素x插入到集合s中,若元素已存在,则不会重复插入该元素,对集合的状态无影响。

find在集合s中查找等于x的元素,并返回指向该元素的迭代器。若不存在,则返回s.end()。

lower_bound查找大于等于x的元素中最小的一个,并返回指向该元素的迭代器。

upper_bound查找大于x的元素中最小的一个,并返回指向该元素的迭代器。

erase从s中删除迭代器it指向的元素
count返回集合s中等于x的元素个数

map

map容器是一个键值对key-value的映射,其内部实现是一棵以key为关键码的红黑树。Map的key和value可以是任意类型,其中key必须定义小于号运算符。

//定义
map<key_type, value_type> name;
//例如:
map<long, long, bool> vis;
map<string, int> hash;
map<pair<int, int>, vector<int>> test;//函数与set类似
//h.find(x) 在变量名为h的map中查找key为x的二元组。

2-位运算

& 与
| 或
~ 非
^ 异或
左移(向左移动n位,在末尾补n个0)
右移(向右移n位,去掉末尾的n位数)

常用操作:
(1)求x的第k位(从右向左看,从0编号)数字 x >> k & 1
(2)lowbit(x) = x & -x,返回x的最后一位1

3-常用库函数

reverse 翻转

//翻转一个vector:
reverse(a.begin(), a.end());//翻转一个数组,元素存放在下标1~n:
reverse(a + 1, a + 1 + n);

unique 去重

返回去重之后的尾迭代器(或指针),仍然为前闭后开,即这个迭代器是去重之后末尾元素的下一个位置。该函数常用于离散化,利用迭代器(或指针)的减法,可计算出去重后的元素个数。

//把一个vector去重:
int m = unique(a.begin(), a.end()) – a.begin();//把一个数组去重,元素存放在下标1~n:
int m = unique(a + 1, a + 1 + n)(a + 1);

random_shuffle 随机打乱

用法与reverse相同

sort

对两个迭代器(或指针)指定的部分进行快速排序。可以在第三个参数传入定义大小比较的函数,或者重载“小于号”运算符。

//把一个int数组(元素存放在下标1~n)从大到小排序,传入比较函数:int a[MAX_SIZE];
bool cmp(int a, int b) {return a > b; }
sort(a + 1, a + 1 + n, cmp);//把自定义的结构体vector排序,重载“小于号”运算符:struct rec{ int id, x, y; }
vector<rec> a;
bool operator <(const rec &a, const rec &b) {return a.x < b.x || a.x == b.x && a.y < b.y;
}
sort(a.begin(), a.end());

lower_bound/upper_bound 二分

lower_bound 的第三个参数传入一个元素x,在两个迭代器(指针)指定的部分上执行二分查找,返回指向第一个大于等于x的元素的位置的迭代器(指针)。
upper_bound 的用法和lower_bound大致相同,唯一的区别是查找第一个大于x的元素。当然,两个迭代器(指针)指定的部分应该是提前排好序的。

//在有序int数组(元素存放在下标1~n)中查找大于等于x的最小整数的下标:
int I = lower_bound(a + 1, a + 1 + n,. x) – a;//在有序vector<int> 中查找小于等于x的最大整数(假设一定存在):
int y = *--upper_bound(a.begin(), a.end(), x);

相关文章:

10-STL、位运算、常用函数库

1-STL vector vector是变长数组 //定义vector vector<int>a;//第一维长233&#xff0c;第二维长度动态变化 vector<int>b[233];//自定义的结构体类型也可以保存在vector中 struct res{...}; vector<rec>c;//函数 a.size();//返回vector的实际长度&#xf…...

练习-班级活动(map存储键值对)

问题描述 小明的老师准备组织一次班级活动。班上一共有 n 名 (n 为偶数) 同学&#xff0c;老师想把所有的同学进行分组&#xff0c;每两名同学一组。为了公平&#xff0c;老师给每名同学随机分配了一个 n 以内的正整数作为 id&#xff0c;第 i 名同学的 id 为 ai​。 老师希望…...

纯血鸿蒙:中国操作系统自主创新的里程碑

引言&#xff1a;破局者登场 2024 年 10 月&#xff0c;搭载纯血鸿蒙操作系统&#xff08;HarmonyOS NEXT&#xff09;的华为 Mate 70 系列正式发布&#xff0c;首日预约量突破 330 万。这场现象级热度的背后&#xff0c;不仅是消费者对硬件创新的期待&#xff0c;更是中国科技…...

OpenHarmony 开源鸿蒙北向开发——hdc工具安装

hdc&#xff08;OpenHarmony Device Connector&#xff09;是为开发人员提供的用于设备连接调试的命令行工具&#xff0c;该工具需支持部署在 Windows/Linux/Mac 等系统上与 OpenHarmony 设备&#xff08;或模拟器&#xff09;进行连接调试通信。简单来讲&#xff0c;hdc 是 Op…...

buu-bjdctf_2020_babystack2-好久不见51

整数溢出漏洞 将nbytes设置为-1就会回绕&#xff0c;变成超大整数 从而实现栈溢出漏洞 环境有问题 from pwn import *# 连接到远程服务器 p remote("node5.buuoj.cn", 28526)# 定义后门地址 backdoor 0x400726# 发送初始输入 p.sendlineafter(b"your name…...

YOLO魔改之SAM空间注意力模块

基于SAM注意力的YOLOv7改进算法详解(可用于工业检测方案) 一、应用场景说明 本改进算法适用于以下工业检测场景: ​复杂背景下的微小目标检测​(电子元件缺陷、PCB板焊点)​密集目标重叠检测​(传送带上的包裹分拣、人群计数)​动态环境目标追踪​(无人机巡检、自动驾…...

【Java SE】抽象类/方法、模板设计模式

目录 1.抽象类/方法 1.1 基本介绍 1.2 语法格式 1.3 使用细节 2. 模板设计模式&#xff08;抽象类使用场景&#xff09; 2.1 基本介绍 2.2 具体例子 1.抽象类/方法 1.1 基本介绍 ① 当父类的某些方法&#xff0c;需要声明&#xff0c;但是又不确定如何实现时&#xff…...

文件相关函数的总结与记忆

1.字符的输入输出 char ch getchar();//不需要传递参数 putchar(a)putc、getc与fputc、fgetc一致 //必须用int接受&#xff0c;因为返回int类型&#xff0c;char因为编译器不同而可能为无符号和有符号 int ch if( (ch getchar() ) ! EOF) 2.行的输入输出 也可以用于二进制…...

SpringBoot有几种获取Request对象的方法

HttpServletRequest 简称 Request&#xff0c;它是一个 Servlet API 提供的对象&#xff0c;用于获取客户端发起的 HTTP 请求信息。例如&#xff1a;获取请求参数、获取请求头、获取 Session 会话信息、获取请求的 IP 地址等信息。 那么问题来了&#xff0c;在 Spring Boot 中…...

Unix 域套接字(本地套接字)

Unix 域套接字&#xff08;Unix Domain Sockets&#xff09;&#xff0c;也称为本地套接字&#xff08;Local Sockets&#xff09;&#xff0c;是一种用于同一主机上进程间通信&#xff08;IPC&#xff09;的机制。Unix 域套接字提供了一种高效的进程间通信方式&#xff0c;它利…...

Nordic nRF 蓝牙的 Direct Test Mode (DTM) 测试介绍

目录 概述 1. 核心物理层参数 1.1 射频频率 (RF Channel Frequency) 1.2 发射功率 (TX Power) 1.3 调制方式 (Modulation) 1.4 数据包类型 (Packet Type) 1.5 测试模式 (Test Mode) 2. 参数配置方法 2.1 通过 HCI 命令配置 2.2 示例&#xff08;nRF52 系列&#xff0…...

go安装lazydocker

安装 先安装go环境 https://blog.csdn.net/Yqha1/article/details/146430281?fromshareblogdetail&sharetypeblogdetail&sharerId146430281&sharereferPC&sharesourceYqha1&sharefromfrom_link 安装lazydocker go install github.com/jesseduffield/laz…...

LangChain开发(一)介绍和第一个例子

文章目录 简介LangChain框架组成LangChain库&#xff08;Libraries&#xff09;LangChain任务处理流程核心概念1. LLMs2. Chat Models3. 消息&#xff08;Message&#xff09;4. 提示&#xff08;prompts&#xff09;5. 输出解析器&#xff08;Output Parsers&#xff09;6.Ret…...

Chrome-Edge-IDEA-Win 常用插件-工具包

Chrome-Edge-IDEA-Win 常用插件-工具包 Chrome-Edge-IDEA-Win 常用插件-工具包谷歌插件chropathJSONViewOctotree - GitHub code treeXPath Helper书签侧边栏篡改猴Print Edit WEEdge浏览器插件IDEA插件CodeGlance Pro 代码迷你缩放图插件Alibaba Cloud ToolkitAlibaba Java Co…...

电加热产品亚马逊审核标准UL499报告

很多亚马逊卖家都上架应季产品 像加热垫 加热杯垫 加热毯等产品 都少不了亚马逊UL测试的报告 亚马逊明确要求 电子产品在亚马逊销售就必须需要有UL报告 不然就产品就被有下架的风险。由于 UL 标准也就是美洲的安全测试标准&#xff0c;因此亚马逊出于对安全的考虑会加强对带电的…...

从实践到创新:低代码驱动教育行业数字化转型

随着数字化转型浪潮席卷教育领域&#xff0c;低代码开发平台因其“低门槛、高效率、强适配”特性&#xff0c;正成为教育行业信息化改革的新工具。本文将结合低代码技术在教育场景中的典型应用案例&#xff0c;分享其对教学管理、科研创新及人才培养模式的变革价值。 一、政策与…...

@AuthenticationPrincipal user null

AuthenticationPrincipal user: null 当使用 AuthenticationPrincipal 注解时&#xff0c;如果注入的 user 为 null&#xff0c;通常是因为以下原因之一&#xff1a; 1. 用户未登录 原因 当前请求没有经过身份验证&#xff0c;Spring Security 的 SecurityContext 中没有用户…...

dfs刷题排列问题 + 子集问题 + 组和问题总结

文章目录 一、排列问题全排列II题解代码 优美的排列题解代码 二、子集问题字母大小写全排列题解代码 找出所有子集的异或总和再求和题解代码 三、组合问题电话号码的字母组合题解代码 括号生成题解代码 组合题解代码 目标和题解代码 组合总和题解代码 总结 一、排列问题 全排列…...

citrix安装部署

在Citrix环境中&#xff0c;特别是在Citrix XenApp或Citrix XenDesktop的部署中&#xff0c;涉及到多个步骤和考虑因素。Citrix是一家提供虚拟化桌面和应用程序解决方案的公司&#xff0c;其产品可以帮助企业实现桌面和应用虚拟化&#xff0c;从而提升灵活性、安全性和管理效率…...

ffmpeg库视频硬编码使用流程

‌一、硬件编码核心流程‌ ‌硬件设备初始化 // 创建CUDA硬件设备上下文‌ AVBufferRef *hw_device_ctx NULL; av_hwdevice_ctx_create(&hw_device_ctx, AV_HWDEVICE_TYPE_CUDA, NULL, NULL, 0);// 绑定硬件设备到编码器上下文‌ codec_ctx->hw_device_ctx av_buffer_…...

996引擎-接口测试:消息Tips

996引擎-接口测试:消息Tips 发送视野内广播消息 sendrefluamsg发送聊天框消息 sendmsg发送地图消息 sendmapmsg打印消息到控制台 release_print发送自定义颜色的文字信息 guildnoticemsg测试NPC参考资料发送视野内广播消息 sendrefluamsg function npc_test_onclick1(player)-…...

【入门初级篇】布局类组件的使用(1)

【入门初级篇】布局类组件的使用&#xff08;1&#xff09; 视频要点 &#xff08;1&#xff09;章节大纲介绍 &#xff08;2&#xff09;布局类组件类型介绍&#xff1a;行布局、列布局、标题 &#xff08;3&#xff09;实操演示&#xff1a;列表统计查询布局模型 点击访问my…...

JavaWeb之WebSocket

目录 一、 websocket 概念二、WebSocket原理三、WebSocket特点四、WebSocket应用场景五、Websocket基本使用1、创建Websocket对象2、Websocket事件3、Websocket方法4、前端服务程序 六、聊天室案例1、Tomcat版本&#xff1a;8.0.442、Maven 依赖&#xff1a;3、前端代码4、后端…...

算法2--两数相加

题目描述 解题思路 题目说的很详细了&#xff0c;也就是把每个数倒序写成链表进行输入&#xff0c;然后让你计算两个倒序数组的和&#xff0c;要保证跟预期的结果一样。 首先应该考虑的是两个数组的长度问题&#xff0c;对于链表的每一位进行加法运算&#xff0c;如果两个列表…...

突破边界:Tauri 2.0全局状态管理的原子级实践

精心打造的Tauri 2.0全局状态管理深度指南&#xff0c;融合最新框架特性与企业级实践方案&#xff1a; 一、Tauri 2.0状态管理新范式 1.1 量子态存储模型 #mermaid-svg-paiGRksb0JRQ3TqJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fil…...

Springboot的jak安装与配置教程

目录 Windows系统 macOS系统 Linux系统 Windows系统 下载JDK&#xff1a; 访问Oracle官网或其他JDK提供商网站&#xff0c;下载适合Windows系统的JDK版本。网站地址&#xff1a;Oracle 甲骨文中国 | 云应用和云平台点击进入下滑&#xff0c;点击进入下载根据自己的系统选择&…...

Axure大屏可视化模板:赋能多领域,开启数据展示新篇章

在当今这个数据爆炸的时代&#xff0c;数据已经成为各行各业的核心资产。然而&#xff0c;如何高效、直观地展示数据&#xff0c;并将其转化为有价值的决策依据&#xff0c;成为了许多企业和组织面临的共同挑战。Axure大屏可视化模板&#xff0c;作为一款强大的数据展示工具&am…...

大模型训练为什么选择交叉熵损失(Cross-Entropy Loss):均方误差(MSE)和交叉熵损失的深入对比

交叉熵损失&#xff1a;深度学习中的基石与洞见 交叉熵损失&#xff08;Cross-Entropy Loss&#xff09;是现代深度学习中分类任务的核心损失函数&#xff0c;尤其在训练大规模模型&#xff08;如 transformers 等大型语言模型 LLM&#xff09;时&#xff0c;几乎无处不在。对…...

C++|GLog开源库的使用 如何实现自定义类型消息日志

参考&#xff1a; C glog使用教程与代码演示 C第三方日志库Glog的安装与使用超详解 GLOG从入门到入门 glog 设置日志级别_glog C版本代码分析 文章目录 日志等级自定义消息创建使用宏定义 日志等级 在 glog 中&#xff0c;日志的严重性是通过 LogSeverity 来区分的&#xff0c…...

cursor常用快捷键(JetBrains Darcula主题风格)

一、基础操作速查 打开/创建项目 打开项目&#xff1a;Ctrl Shift O&#xff08;选择文件夹&#xff09;新建文件&#xff1a;Ctrl N保存文件&#xff1a;Ctrl S关闭当前标签页&#xff1a;Ctrl F4 代码编辑 复制当前行&#xff1a;Ctrl D删除当前行&#xff1a;Ctrl …...