初学者:《C++ STL容器入门:手把手教你使用常用容器》

初学者:《C++ STL容器入门:手把手教你使用常用容器》
  

🎬 博主名称个人主页

🔥 个人专栏《算法通关》《Java讲解》

⛺️心简单,世界就简单

目录

序言

vector

倍增思想:

一,初始化

常用函数

遍历方式

黑科技

pair

定义方式

取出元素方式

构造一个pair

用来干嘛

string

常用函数

操作

queue队列

priority_queue优先队列

常用函数

如何构造小根堆

stack 栈

常用函数

deque 双端队列

set,multiset

常用函数

map,multimap

unordered_set,  unordered_map,   unordered_multiset,  unordered_multimap


序言

我们今天来讲一下

vector

string

queue, priority_queue,

stack

set, map, multiset, multimap

unordered_set,  unordered_map,   unordered_multiset,  unordered_multimap
vector倍增思想:

系统为某一程序分配空间时,所需的时间,基本上与空间大小无关,与申请次数有关

所以,我们申请一个数组大小为1000的数组,和申请1000个大小为1的数组,时间差别就是1000倍,就是因为有这样一个特点,所以我们变长数组要尽量减小申请空间的次数

我们在申请长度后,如果我们空间不够,我们就将长度*2再次申请一,初始化常用函数遍历方式黑科技

vector是支持比较运算的,按字典序大小排序比较

pair

存储一个二元组,可以看成有两个变量的结构体,并且内部有比较函数定义方式

这两个数据类型放什么都行取出元素方式

这个是支持比较运算的,排序时候也是按字典序来排,以 first 为第一关键字,,以第second为第二关键字构造一个pair用来干嘛

最常用就是说,有一个东西有两种不同属性,我们就可以用一个pair来存,我们需要按照一种属性来排序,我们把需要排序的属性放在first。

当然如果有三个属性,我们也可以用pair来存,就pair<int, pair<int, int>> p;这样就行了


string

c++把字符串进行了封装常用函数操作

queue队列

priority_queue优先队列

他的原理就是拿堆来实现的,默认是大根堆常用函数如何构造小根堆

1,q.push()时直接插入负值 

2,定义时就直接定义为小根堆

stack 栈常用函数

deque 双端队列

其实时一个加强版的vector,功能很强大,但是由于时间很慢,我们不常用
set,multiset

set里面不能包含任何重复元素,multiset里可以有重复元素常用函数

set里的所有操作都是O( logn)时间复杂度

map,multimap
unordered_set,  unordered_map,   unordered_multiset,  unordered_multimap

这些和上面的操作都是几乎一样的

不支持lower_bound, ++ ,--他里面时无序的,因为他是unordered,好处就是他的增删改查复杂度都是O( 1 )

这个yxc的stl总结,可以也看看

vector, 变长数组,倍增的思想 size() 返回元素个数 empty() 返回是否为空 clear() 清空 front()/back() push_back()/pop_back() begin()/end() [] 支持比较运算,按字典序 pair<int, int> first, 第一个元素 second, 第二个元素 支持比较运算,以first为第一关键字,以second为第二关键字(字典序) string,字符串 size()/length() 返回字符串长度 empty() clear() substr(起始下标,(子串长度)) 返回子串 c_str() 返回字符串所在字符数组的起始地址 queue, 队列 size() empty() push() 向队尾插入一个元素 front() 返回队头元素 back() 返回队尾元素 pop() 弹出队头元素 priority_queue, 优先队列,默认是大根堆 size() empty() push() 插入一个元素 top() 返回堆顶元素 pop() 弹出堆顶元素 定义成小根堆的方式:priority_queue<int, vector<int>, greater<int>> q; stack, 栈 size() empty() push() 向栈顶插入一个元素 top() 返回栈顶元素 pop() 弹出栈顶元素 deque, 双端队列 size() empty() clear() front()/back() push_back()/pop_back() push_front()/pop_front() begin()/end() [] set, map, multiset, multimap, 基于平衡二叉树(红黑树),动态维护有序序列 size() empty() clear() begin()/end() ++, -- 返回前驱和后继,时间复杂度 O(logn) set/multiset insert() 插入一个数 find() 查找一个数 count() 返回某一个数的个数 erase() (1) 输入是一个数x,删除所有x O(k + logn) (2) 输入一个迭代器,删除这个迭代器 lower_bound()/upper_bound() lower_bound(x) 返回大于等于x的最小的数的迭代器 upper_bound(x) 返回大于x的最小的数的迭代器 map/multimap insert() 插入的数是一个pair erase() 输入的参数是pair或者迭代器 find() [] 注意multimap不支持此操作。 时间复杂度是 O(logn) lower_bound()/upper_bound() unordered_set, unordered_map, unordered_multiset, unordered_multimap, 哈希表 和上面类似,增删改查的时间复杂度是 O(1) 不支持 lower_bound()/upper_bound(), 迭代器的++,-- bitset, 圧位 bitset<10000> s; ~, &, |, ^ >>, << ==, != [] count() 返回有多少个1 any() 判断是否至少有一个1 none() 判断是否全为0 set() 把所有位置成1 set(k, v) 将第k位变成v reset() 把所有位变成0 flip() 等价于~ flip(k) 把第k位取反 

之后要开图论的系列了。球球三连,码字不易,谢谢谢谢大家

Read more

Git——连接远程仓库

1. 概述         Git连接远程仓库是版本控制中的重要操作,它允许开发者将本地代码库与云端存储平台(如GitHub、GitLab或Bitbucket)进行同步。通过建立远程连接,开发者可以实现多人协作开发、代码备份和版本管理等功能。         连接远程仓库通常涉及以下几个核心步骤: * 创建远程仓库:在代码托管平台新建一个空的仓库 * 获取远程仓库地址:通常有HTTPS和SSH两种协议可选 * 本地配置:在本地Git环境中添加远程仓库信息 * 验证连接:测试本地与远程仓库的通信是否正常         这里只介绍创建完远程仓库之后的连接(创建仓库看主页的另一个笔记),介绍四种:gitee的HTTPS连接、gitee的SSH连接、github的HTTPS连接、github的SSH连接。 2. 前期准备         先初始化git 3. 连接远程仓库 (1)gitee的https连接 git remote add origin <远程仓库地址>        gitee已创建空仓https://gitee.com/kongkongk/ha

By Ne0inhk
解锁时序数据库选型密码,为何国产开源时序数据库IoTDB脱颖而出?

解锁时序数据库选型密码,为何国产开源时序数据库IoTDB脱颖而出?

摘要:本文系统梳理 IoTDB 的缘起、优势、核心功能与生态,指导如何根据业务需求(写入频率、存储规模、实时性等)做选型;并给出 Windows 单机安装、建库插数、查询三步走示例,附上海电气、蓝箭航天、德国铁路三大落地案例,助力快速落地时序数据平台。 目录 1.时序数据库引言 (一)IoTDB是什么 (二)为什么使用IoTDB (三)IoTDB背景 2.选型前的自我审视:明确你的需求 (一)业务场景剖析 (二)关键指标考量 3.核心功能大揭秘:衡量数据库的硬实力 (一)写入性能 (二)数据压缩 (三)查询性能 (四)分布式支持 (五)数据生命周期管理 4.

By Ne0inhk

永久开源免费用!科哥打造的OCR文字检测工具推荐

永久开源免费用!科哥打造的OCR文字检测工具推荐 一款真正开箱即用、无需配置、不收一分钱的OCR文字检测WebUI工具——它不只是一段代码,而是一个完整可交付的生产力解决方案。本文将带你从零开始,快速上手这款由科哥独立开发、持续维护的cv_resnet18_ocr-detection镜像,并深入理解它在真实工作流中能为你省下多少时间。 1. 为什么你需要这个OCR工具? 你是否也经历过这些时刻: * 扫描合同后想快速提取条款,却要反复截图、粘贴、校对; * 整理上百张发票照片,手动录入金额和日期,一坐就是半天; * 做竞品分析时,看到对手宣传页上的关键数据,却没法一键复制; * 学生党整理课堂PPT截图,逐张打字转文字,效率低到怀疑人生。 市面上的OCR服务,要么按次收费、要么限制调用量、要么需要注册企业资质、要么部署复杂得像在搭火箭。而今天介绍的这款工具,没有试用期、没有水印、不联网上传、不依赖云服务、不强制绑定账号——它就安静地运行在你的服务器或本地机器上,点开浏览器就能用。 更关键的是:它不是简单套壳,而是基于ResNet18主干网络+优化检测头的轻量级OC

By Ne0inhk

Git-RSCLIP快速入门:从上传图像到智能分类

Git-RSCLIP快速入门:从上传图像到智能分类 遥感图像分析一直是个“高门槛”活儿——要调模型、配环境、写代码、训参数,光是部署一个可用的分类服务就得折腾半天。但如果你只需要快速判断一张卫星图里是农田、森林还是机场,真的需要这么复杂吗?Git-RSCLIP 镜像给出了另一种答案:上传即识别,输入即结果,零训练、零配置、零等待。 这不是概念演示,而是一个已预加载完整模型(1.3GB)、自动启用GPU加速、开机即用的成熟工具。它不依赖你懂PyTorch,也不要求你熟悉遥感数据处理流程;你只需打开浏览器,拖入一张图,写几行英文描述,几秒后就能看到每个标签的匹配置信度。本文将带你跳过所有理论铺垫和环境踩坑,直接上手完成一次真实遥感图像的智能分类全流程——从第一次访问界面,到获得可信赖的分类结果,全程控制在5分钟内。 1. 什么是Git-RSCLIP?一句话说清它的特别之处 Git-RSCLIP 不是通用图文模型的简单迁移,而是北航团队专为遥感领域深度打磨的视觉语言模型。它基于 SigLIP 架构,在 Git-10M 数据集(含1000万对遥感图像与专业文本描述)

By Ne0inhk