初学者:《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

Python OCR文字识别:pytesseract安装配置教程

Python OCR文字识别:pytesseract安装配置教程

pip install pytesseract import pytesseract print(pytesseract.image_to_string('test.jpg'))# TesseractNotFoundError: tesseract is not installed pytesseract是Python的OCR(光学字符识别)库,可以从图片中提取文字。Windows上使用需要先安装Tesseract OCR引擎。 版本要求 pytesseract依赖Tesseract OCR引擎: 组件推荐版本Python版本说明pytesseract0.3.103.7+Python封装库Tesseract-OCR5.x-OCR识别引擎中文语言包chi_sim-简体中文识别(可选)英文语言包eng-英文识别(默认自带) 注意:pytesseract只是封装库,必须先安装Tesseract OCR引擎才能使用。 安装中可能遇到的问题 问题1:Tesseract引擎未安装 import pytesseract pytesseract.image_to_

By Ne0inhk
【2026 最新】Python 与 PyCharm 详细下载安装教程 带图展示(Windows 版)

【2026 最新】Python 与 PyCharm 详细下载安装教程 带图展示(Windows 版)

前言 Python 是当今最流行的编程语言之一,广泛应用于 Web 开发、数据分析、人工智能、自动化脚本等领域。而 PyCharm 作为 JetBrains 公司推出的 Python 专业集成开发环境(IDE),凭借智能代码补全、调试器、虚拟环境管理、版本控制集成等强大功能,成为众多开发者首选工具。 本教程专为 Windows 系统用户 编写,将手把手指导你完成 Python 解释器 和 PyCharm IDE 的下载、安装与基础配置,助你快速搭建本地 Python 开发环境。 一、Python 下载与安装 1.1 访问 Python 官网 打开浏览器,访问 Python 官方网站:Download

By Ne0inhk
【C++】——红黑树的平衡之道:深入实现与优化

【C++】——红黑树的平衡之道:深入实现与优化

坎坷之路,终抵星空。 —— 哈珀·李 《杀死一只反舌鸟》 目录 1. 解密红黑树:平衡与效率的双重奏 2. 搭建红黑树:从零到自平衡的实现之路 2.1 树基打底:设计与框架构建 2.2 插入有道:插入操作的技巧与挑战 2.3 旋转为王:平衡的秘密武器 2.4 查找制胜:高效查询之道 3. 性能透析:红黑树的效率与边界 1. 解密红黑树:平衡与效率的双重奏 * 探讨红黑树如何通过一组简单的规则保持平衡,并提供高效的查询和更新操作。 红黑树是一种特殊的二叉树,它遵循一套独特的规则: 每个节点要么是红色,要么是黑色。根节点必须是黑色的。如果一个节点是红色的,则它的两个子节点必须是黑色的。对于任意一个节点,从该节点到其所有后代叶子节点的简单路径上,必须包含相同数目的黑色节点。每个叶子节点都是黑色的。这里的叶子节点指的是为空的节点。 TIP:红黑树的规则并不要求红黑节点严格交替出现。

By Ne0inhk
Python安装cv2(OpenCV)的终极指南:告别`pip install cv2`的坑!

Python安装cv2(OpenCV)的终极指南:告别`pip install cv2`的坑!

关键词:Python安装cv2、opencv-python、pip安装OpenCV、cv2报错解决 为什么直接pip install cv2会失败? 🤔 许多新手在使用Python安装OpenCV(即cv2模块)时,会直接运行 pip install cv2,结果却遇到报错: ERROR: Could not find a version that satisfies the requirement cv2 这是因为PyPI(Python包仓库)中注册的包名不是cv2,而是opencv-python! 本文将手把手教你正确安装方法,并解决常见问题! 一、快速安装OpenCV 1. 基础安装(核心功能) 打开终端(Windows下为CMD/PowerShell,Mac/Linux为Terminal),运行: pip install opencv-python 此命令会安装OpenCV的核心功能库。 2. 扩展安装(

By Ne0inhk