C++ 标准模板库(STL)
1、vector
动态数组,可随时添加删除元素,在堆空间开辟内存。
| 方法 | 含义 |
| front() | 返回第一个元素O(1) |
| back() | 返回最后一个元素O(1) |
| pop_back() | 删除最后一个元素O(1) |
| push_back(ele) | 在末尾插入元素O(1) |
| size() | 返回实际元素个数O(1) |
| clear() | 清除所有元素O(N) |
| resize(n, v) | 重置数组大小为n,初始值为v(默认0) |
| insert(it, x) | 在迭代器it处插入元素x O(N) |
| erase(first, last) | 删除[first,last)的所有元素O(N) |
| begin() | 返回首元素的迭代器O(1) |
| end() | 返回最后一个元素后一个位置的迭代器O(1) |
| empty() | 判断该数组是否为空O(1) |
2、stack
栈,先进后出,后进先出。栈只能对栈顶元素进行操作,如果遍历,只能将栈中元素一个个取出来存在数组中。
| 方法 | 含义 |
| push(ele) | 元素ele入栈,增加元素O(1) |
| pop() | 移除栈顶元素O(1) |
| op() | 取得栈顶元素O(1) |
| empty() | 判断栈内是否为空O(1) |
| size() | 返回栈内元素的个数O(1) |
3、queue
队列,先进先出。
| 方法 | 含义 |
| front() | 返回第一个元素O(1) |
| back() | 返回最后一个元素O(1) |
| push(ele) | 在末尾插入元素O(1) |
| pop() | 删除第一个元素O(1) |
| size() | 返回队列中元素个数O(1) |
| empty() | 判断队列是否为空O(1) |
4、deque
双向队列,首尾都可添加删除元素。
| 方法 | 含义 |
| push_back(x)/push_front(x) | 把x插入队尾后 / 队首O(1) |
| back()/front() | 返回队尾 / 队首元素O(1) |
| pop_back()/pop_front() | 删除队尾 / 队首元素O(1) |
| erase(it) | 删除双端队列中的某一个元素O(1) |
| erase(iterator first,iterator last) | 删除双端队列中[first,last)中的元素O(1) |
| empty() | 判断队列是否为空O(1) |
| size() | 返回队列中元素个数O(1) |
| clear() | 清空队列O(N) |
5、priority_queue
优先队列,在堆空间开辟内存,是在正常队列的基础上加了优先级,保证每次的队首元素都是优先级最大的。
| 方法 | 含义 |
| top() | 访问队首元素O(1) |
| push() | 入队O(logN) |
| pop() | 堆顶(队首)元素出队O(logN) |
| size() | 队列元素个数O(1) |
| empty() | 判断是否为空O(1) |
注意:没有clear()方法!优先队列自定义排序规则和sort()函数定义cmp函数很相似,但是最后返回的情况是相反的。即相同的符号,最后定义的排列顺序是完全相反的。
所以只需要记住sort的排序规则和优先队列的排序规则是相反的就可以了。
示例代码:
/*
第一个参数:int就是优先队列中存储的数据类型第二个参数:vector<int> 是用来承载底层数据结构堆的容器,若优先队列中存放的是double型数据,就要填vector<double>,总之存的是什么类型的数据,就相应的填写对应类型。同时也要改动第三个参数里面的对应类型。第三个参数:less<int> 表示数字大的优先级大,堆顶为最大的数字; greater<int>表示数字小的优先级大,堆顶为最小的数字
*/
priority_queue<int, vector<int>, less<int> > q1; // 大根堆, 每次取出的元素是队列中的最大值
priority_queue<int, vector<int>, greater<int>> q2; // 小根堆, 每次取出的元素是队列中的最小值//自定义排序:struct cmp1 {bool operator()(int x, int y) {return x > y;}
};
struct cmp2 {bool operator()(const int x, const int y) {return x < y;}
};
priority_queue<int, vector<int>, cmp1> q1; // 小根堆
priority_queue<int, vector<int>, cmp2> q2; // 大根堆
6、map
映射,存放键值对(key-value),关联型容器,内部用红黑树实现,默认排序按照键的ASCII码顺序排列。
| 方法 | 含义 |
| begin() | 返回指向map头部的迭代器 |
| clear() | 删除所有元素 |
| count() | 返回指定元素出现的次数 |
| empty() | 如果map为空则返回true |
| end() | 返回指向map末尾的迭代器 |
| equal_range() | 返回特殊条目的迭代器对 |
| erase() | 删除一个元素 |
| find() | 查找一个元素 |
| get_allocator() | 返回map的配置器 |
| insert() | 插入元素 |
| key_comp() | 返回比较元素key的函数 |
| lower_bound() | 返回键值>=给定元素的第一个位置 |
| max_size() | 返回可以容纳的最大元素个数 |
| rbegin() | 返回一个指向map尾部的逆向迭代器 |
| rend() | 返回一个指向map头部的逆向迭代器 |
| size() | 返回map中元素的个数 |
| swap() | 交换两个map |
| upper_bound() | 返回键值>给定元素的第一个位置 |
| value_comp() | 返回比较元素value的函数 |
注意:
查找元素是否存在时,可以使用①mp.find() ② mp.count() ③ mp[key]
但是第三种情况,如果不存在对应的key时,会自动创建一个键值对(产生一个额外的键值对空间),所以为了不增加额外的空间负担,最好使用前两种方法。
示例代码:
/*插入元素的四种方式*/map<string, string> mp;mp["学习"] = "看书";mp.insert(make_pair("vegetable","蔬菜"));mp.insert(pair<string,string>("fruit","水果"));mp.insert({"hahaha","wawawa"});
7、set
集合,元素不会重复,当插入已有元素时,并不会插入进去,元素自动从小到大排序。
| 方法 | 含义 |
| begin() | 返回指向第一个元素的迭代器 |
| clear() | 清除所有元素 |
| count() | 返回某个值元素的个数 |
| empty() | 如果集合为空,返回true |
| end() | 返回指向最后一个元素的迭代器 |
| equal_range() | 返回集合中与给定值相等的上下限的两个迭代器 |
| erase() | 删除集合中的元素 |
| find() | 返回一个指向被查找到元素的迭代器 |
| get_allocator() | 返回集合的分配器 |
| insert() | 在集合中插入元素 |
| lower_bound() | 返回指向大于(或等于)某值的第一个元素的迭代器 |
| key_comp() | 返回一个用于元素间值比较的函数 |
| max_size() | 返回集合能容纳的元素的最大限值 |
| rbegin() | 返回指向集合中最后一个元素的反向迭代器 |
| rend() | 返回指向集合中第一个元素的反向迭代器 |
| size() | 集合中元素的数目 |
| swap() | 交换两个集合变量 |
| upper_bound() | 返回大于某个值元素的迭代器 |
| value_comp() | 返回一个用于比较元素间的值的函数 |
8、array
array是C++11新增的容器,效率与普通数据相差无几,比vector效率要高,自身添加了一些成员函数。和其它容器不同,array容器的大小是固定的,无法动态的扩展或收缩,只允许访问或者替换存储的元素。array的使用要在std命名空间里。
9、tuple
元组,tuple模板是pair的泛化,可以封装不同类型任意数量的对象。
//声明
tuple<int, int, string> t1;//赋值
t1 = make_tuple(1, 1, "hahaha");//声明同时初始化
tuple<int, int, int, int> t2(1, 2, 3, 4);//使用pair对象构造tuple对象,但tuple对象必须是两个元素
auto p = make_pair("wang", 1);
tuple<string, int> t3 {p}; //将pair对象赋给tuple对象//获取tuple对象t的第一个元素
int first = get<0>(t);//修改tuple对象t的第一个元素
get<0>(t) = 1;
相关文章:
C++ 标准模板库(STL)
1、vector 动态数组,可随时添加删除元素,在堆空间开辟内存。 方法含义front() 返回第一个元素O(1) back()返回最后一个元素O(1)pop_back()删除最后一个元素O(1)push_back(ele)在末尾插入元素O(1)size()返回实际元素个数O(1)clear()清除所有元素O(N)resi…...
【Javascript】设计模式之发布订阅模式
文章目录 1、现实中的发布-订阅模式2、DOM 事件3、简单的发布-订阅模式4、通用的发布-订阅模式5、先发布再订阅6、小结 发布—订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于…...
DataLoader
import torchvision from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter# 准备的测试数据集 数据放在了CIFAR10文件夹下test_data torchvision.datasets.CIFAR10("./CIFAR10",trainFalse, transformtorchvision.transfor…...
持续集成(CICD)- Jenkins+Git+gogs综合实战(笔记二)
文章目录 七、拉取代码方法一:直接填写命令进行拉取(不建议用这种)方法二:使用源码管理拉取代码步骤一:确认环境(检查自己是否有Git插件)步骤二:构建项目时对项目的源码管理选择 Git步骤三:输入你仓库的SSH地址或者https地址,并且添加gitee的用户名和密方法一和方法二…...
VUE:key属性的作用
在 Vue.js 中,key属性的主要作用是帮助 Vue 在进行 DOM 更新时,能够更准确地识别哪些节点可以复用。 当key值发生变化时,Vue 会执行以下步骤: 1.查找旧节点:Vue 会查找虚拟 DOM 中具有旧key值的节点。 2.匹配新节点…...
linux的通信方案(SYSTEM V)
文章目录 共享内存(Share Memory)信号队列(Message Queue)信号量(semaphore) 进程间通信的核心理念:让不同的进程看见同一块资源 linux下的通信方案: SYSTEM V 共享内存(Share Memory) 特点:1.共享内存是进程见通信最…...
VUE 入门及应用 ( 路由 router )
6.前端路由 router Vue Router | Vue.js 的官方路由 (vuejs.org) 官方地址 : https://router.vuejs.org/zh/ 6.1.基本配置 6.1.0.准备 MyPage.vue 创建 用于测试 vue文件 ../views/MyPage.vue <template><div><h1>MyPage</h1></div> </…...
SpringBoot集成RocketMQ
RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件,前身是MetaQ,是阿里参考Kafka特点研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、高可靠、高实时、分布式特点。 环境搭…...
【Web】关于FastJson反序列化开始前的那些前置知识
目录 FastJson介绍 FJ序列化与反序列化方法 关于反序列化三种方式的关系与区别 FastJson反序列化漏洞原理通识 关于getter&setter FastJson介绍 FastJson(快速JSON)是一个Java语言编写的高性能、功能丰富且易于使用的JSON解析和序列化库。它由…...
工业镜头的重要参数之视场、放大倍率、芯片尺寸--51camera
今天来简单介绍下工业镜头中常用的参数中的三个: 1、视场 视场(FOV)也称视野,是指能被视觉系统观察到的物方可视范围。 对于镜头而言,可观察到的视场跟镜头放大倍率及相机芯片选择有关。因此需要根据被观察物体的尺寸ÿ…...
基于java springboot+redis网上水果超市商城设计和实现以及文档
基于java springbootredis网上水果超市商城设计和实现以及文档 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留…...
3. 在Go语言项目中使用Zap日志库
文章目录 一、介绍二、 默认的Go Logger1. 实现Go Logger2. 设置Logger3. 使用Logger4. Logger的运行5. Go Logger的优势和劣势 三、Uber-go Zap1. 为什么选择Uber-go zap2. 安装3. 配置Zap Logger4. 定制logger4.1 将日志写入文件而不是终端4.2 将JSON Encoder更改为普通的Log…...
想要节省成本,哪个品牌的https证书值得考虑?
为了确保网站数据传输安全,启用HTTPS加密是关键步骤。在众多SSL证书供应商中,如何找到价格合理且品质优良的HTTPS加密证书呢?本文将探讨这个问题,并重点关注具有高性价比优势的沃通CA。 沃通CA作为业内知名的SSL证书服务商&#x…...
R语言及其开发环境简介
R语言及其开发环境简介 R 语言历史 R 语言来自 S 语言,是 S 语言的一个变种。S语言由贝尔实验室研究开发,著名的 C 语言、Unix 系统也是贝尔实验室开发的。R 属于 GNU 开源软件,最初发布于1997年,实现了与 S 语言基本相同的功能…...
部署DNS解析服务
一、安装软件,关闭防火墙,启动服务 1.yum install -y bind bind-utils bind-chroot 2.systemctl stop firewalld && setenforce 0 3.systemctl start named 二、工作目录 /var/named/chroot/etc #存放主配置文件 /var/named/chroot/var/n…...
2024新算法:鹅算法优化VMD参数,五种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵...
本期采用鹅算法优化一下VMD参数。利用MATLAB官方自带的VMD函数。 替换为官方自带的VMD函数后,寻优速度真的大幅度提升!数据量大的不妨都试试这个官方的VMD函数。当然要下载2020a以上的MATLAB才可以哦! 同样以西储大学数据集为例,选…...
自定义注解校验
在日常开发中经常会用到String类型的数据当作数值进行映射,势必会做出数值范围的校验,可以通过自定义注解的办法简化代码实现,减少冗余代码。 Target({ElementType.FIELD}) Retention(RetentionPolicy.RUNTIME) Constraint(validatedBy St…...
由数据范围反推算法复杂度以及算法内容
一般ACM或者笔试题的时间限制是1秒或2秒。 在这种情况下,C代码中的操作次数控制在 1 0 7 ∼ 1 0 8 10^7\sim10^8 107∼108为最佳。 下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择: n ≤ 30 n\leq30 n≤30,指数级别…...
js监听F11触发全屏事件
当用户使用 F11 键进行浏览器全屏时,由于此时并非通过浏览器提供的 Fullscreen API 进入全屏模式,因此无法通过 fullscreenchange 事件来监听全屏状态的变化。在这种情况下,可以通过监听 resize 事件来检测浏览器窗口大小的变化,从…...
Seata 2.x 系列【1】专栏导读
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Seata 版本 2.0.0 源码地址:https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 背景2. 简介3. 适用人群4. 环境及版本5. 文章导航5…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
