C++标准模板库(STL)|容器|vector| queue|
对STL进行总结,STL是standard template library的简写,是C++中的一个标准模板库,用于实现常用的数据结构和算法,它是C++程序员经常使用的一个工具箱。STL 的主要目的是提高开发效率和代码质量,使得程序员可以更加便捷地完成常见的操作。里面包括:算法(algorithm)、容器(container)、仿函数(functors)、迭代器(iterator)等,这篇文章先说容器
容器
容器之所以叫容器,可以抽象理解为我们装东西的容器,比如装水的盒子,只不过C++里的容器是用于装数据,STL这个库里面,它提供了很多种容器类型用于存储数据。主要包括vector(动态数组)、set(集合)、map(映射)、stack(栈)、queue(队列)、priority—queue(优先队列)、string(字符串)、pair(二元组)
- vector:可以动态调整大小的数组,支持快速的随机访问和迭代器访问,并且支持在尾部添加或删除元素。
- set:有序集合,其中每个元素都是唯一的,支持快速的查找和插入操作。
- unordered_set:无序集合,其中每个元素都是唯一的,支持快速的查找和插入操作,但元素的顺序是未定义的。
- map:有序映射,其中每个元素都有一个唯一的键值对,支持快速的查找和插入操作。
- unordered_map:无序映射,其中每个元素都有一个唯一的键值对,支持快速的查找和插入操作,但元素的顺序是未定义的。
- deque:双端队列,支持快速的随机访问和迭代器访问,并且支持在头部和尾部添加或删除元素。
- list:双向链表,只支持迭代器访问,并且支持在任意位置添加或删除元素。
vector
它的和数组差不多,区别就是他的长度是动态可变的,存储在堆中,一般可以替换普通数组
#include<vector>
vector<类型> 数组名(长度,[初值]) //构造
vector<int> arr; //构造int数组
vector<int> arr(100); //构造初始长度100的数组
vector<int> arr(100,1); //构造初始长度100的数组,初值为1
vector<vector<int> mat(100,vector<int>()); //构造初始100行,不指定列数的二维数组
vector<vector<int>> mat(100,vector<int>(666,-1)); //构造初始100行,初始列600的二维数组,初始值-1
vector<vector<vetcor<int>>> mat1(100, vector<vector<int>>(6,vector<int>(4))); //构造初始100行,初始列6的三维维数组,
尾接&尾删
- push_back(元素):在vector尾接一个元素,数组长+1
- pop_back():删除vector尾部的一个元素,数组长度-1
改变长度
数组名.resize()
arr.resize(100); //将vector的长度改为100
set
set 里的元素只出现一次,且元素没有顺序 ,因此适用于对元素去重,维护顺序等
#include<set>
set<类型,比较器> 集合名 //构造
set<int> st; //存储int集合(从小到大)
set <int,greater<int>> st1; //存储int集合(从大到小)
遍历
使用迭代器进行遍历
#include<bits/stdc++.h>
using namespace std;int main()
{set<int> st; //构造一个集合st.insert(1); //插入1st.insert(2); //插入2st.erase(1); //删除1st.find(2); //找到1就返回1//遍历for (set<int>::iterator it = st.begin(); it !=st.end(); ++it){cout << *it <<endl;}return 0;
}
map
有序键值对结构,底层原理是黑红树。一个键只可以在映射中出现一次,且没有顺序
健类型:要存储健的数据类型
值类型:要存储的数据类型
比较器:键要比较大小使用的比较器,默认为less<数据类型>,可自定
#include<map>
map<健类型,值类型,比较器> 名字 //构造map
map<int,int> mp; // int—>int的映射(从小到大)
map<int,int,greater<int>> mp1; // int—>int的映射(从大到小)
mp[1] = 2; //增加
mp.erase(1); // 删除1这个键
mp[1] = 3; // 改
cout << mp[1] << endl; //查
mp.count(元素); //检查元素是否存在
for(map<int,int>::iterator it =mp.begin(); it != mp.end(); ++it)
{ cout << it -> first << ' ' << i-> second << endl;
}//上述用迭代器的方法太长 不好读 一般使用下面基于范围循环的方法for(auto &m:mp) //&是引用 m 是自定义的 mp是要便利的map的名字
{cout<<m.first << '' << m.second << endl;
}
stack
通过二次封装双端队列(queue),实现先进后出的栈数据结构
#include<stack>
stack<数据类型> 名字
stack<int> stk; //构造一个栈
stk.push(1); //进栈
stk.pop(); //出栈
stk.top(); //取顶栈
queue
先进先出
#include<queue>
queue<数据类型> 队名 //构造队列
queue<int> que; //构造一个叫que的队列
que.push(元素); //进队
que.pop(); //出队
que.front() ; //取队首
que.back(); //取队尾
deque
首尾都可插入和删除的队列为双端队列
双端队列排序一般不用
priority_queue
优先队列是在正常队列的基础上加了优先级,保证每次的队首元素都是优先级最大的。
可以实现每次从优先队列中取出的元素都是队列中优先级最大的一个
#include<queue>
priority_queue<数据类型> 名字 //构造一个优先队列
priority_queue<int> q1; // 默认大根堆, 即每次取出的元素是队列中的最大值
priority_queue<int, vector<int>, less<int> > q2; // 大根堆, 每次取出的元素是队列中的最大值,同第一行priority_queue<int, vector<int>, greater<int> > q3; // 小根堆, 每次取出的元素是队列中的最小值
string
存储字符串
string (长度,初值) //构造函数
string s1; //构造字符串,为空
string s2 ="abcde"; //构造字符串 并赋值abcd
string s3(10,'6'); //通过构造函数构造为66666666666
cin >> s1; //输入字符串
cout << s1; //输出字符串
s1+="fgj"; //尾接字符串
pair
存储二元组,两个元素的一个组合
#include<utiity>
pair<类型,类型> pr //构造一个二元组
pari<int, int> p1; //存储int型的元组
pair<int, long long> p2;
pair<int, char> pr3={1,'a'}; //赋值 第一个元素是1,第2个元素是a
int a = pr.first; //取第一个值
int b = pr.second; //取第二个值
相关文章:
C++标准模板库(STL)|容器|vector| queue|
对STL进行总结,STL是standard template library的简写,是C中的一个标准模板库,用于实现常用的数据结构和算法,它是C程序员经常使用的一个工具箱。STL 的主要目的是提高开发效率和代码质量,使得程序员可以更加便捷地完成…...
【Android】安卓四大组件之Service用法
文章目录 使用Handler更新UIService基本特点启动方式非绑定式服务使用步骤 绑定式服务步骤 生命周期非绑定式启动阶段结束阶段 绑定式启动阶段结束阶段 前台Service使用步骤结束结束Service本身降级为普通Service降级为普通Service 使用Handler更新UI 主线程创建Handler对象&a…...
Python爬虫入门实战(详细步骤)
1. 技术选型 爬虫这个功能,我个人理解是什么语言都能写的,只要能正常发送 HTTP 请求,将响应回来的静态页面模版 HTML 上把我们所需要的数据提取出来就可以了,原理很简单,这个东西当然可以手动去统计收集,但…...
5、Linux : 网络相关
OSI七层网络模型 TCP/IP四层 概念模型 对应网络协议 应用层(Application) HTTP、TFTP, FTP, NFS, WAIS、 表示层(Presentation) 应用层 Telnet, Rlogin, SNMP, Gopher 会话层(Session) SMTP…...
Linux中针对文件权限的解析
1.文件权限详细解析: -rw-r--r--. 1 root root 114 4月 10 16:32 100.txt 1)-rw-r--r--. 总共11位 第一个“-”和最后一个“.”不用去管,剩下 rw- r-- r-- 属主 属组 其他人 u g o 第一个是“-”表示普通文件 第一个是“d”表示文件目录 …...
【0304】psql 执行“VACUUM FULL”命令的背后实现过程
1. 概述 在前面讲解Postgres内核中解析器相关(【0297】Postgres内核之 INSERT INTO 原始解析树 转 Query 树 (1))内容时,曾提到过,Postgres内核大致将用户下发的SQL语句分为三大类,这里的VACUUM FULL属于CMD_UTILITY; 因此直接调用utility.c(实用程序)中的对应函数。…...
Java常见面试题-11-MongoDb
文章目录 MongoDB 是什么?MongoDB 和关系型数据库 mysql 区别MongoDB 有 3 个数据库分别是什么?MongoDB 中的数据类型MongoDB 适用业务场景 MongoDB 是什么? mongodb 是属于文档型的非关系型数据库,是开源、高性能、高可用、可扩…...
PBLOCK
PBLOCK是附加到Vivado中分配给Pblocks的单元格的只读属性 设计套房。 Pblock是一组单元格,以及一个或多个指定 Pblock所包含的设备资源。在平面规划过程中使用了Pblocks 将其放置到组相关逻辑中,并将其分配到目标设备的某个区域。请参阅 Vivado设计套件用…...
电子纸打造智能、自动化、绿色的工作流程
电子纸打造智能、自动化、绿色的工作流程 RFID技术最早在1940年代问世,1980年开始商业化使用。直到现在RFID(无线射频识别)技术已经深入到我们生活的方方面面。特别是在工业生产、物流运输等领域,RFID技术发挥着越来越重要的作用…...
Redis 的6种回收策略(淘汰策略)详解
Redis 的6种回收策略(淘汰策略)详解 1、Redis的六种淘汰策略1. volatile-lru2. volatile-ttl3. volatile-random4. allkeys-lru5. allkeys-random6. no-eviction 2、使用策略规则 💖The Begin💖点点关注,收藏不迷路&am…...
SQL注入sqli-labs-master关卡一
本文环境搭建使用的是小皮,靶机压缩包:通过百度网盘分享的文件:sqli-labs-php7-master.zip 链接:https://pan.baidu.com/s/1xBfsi2lyrA1QgUWycRsHeQ?pwdqwer 提取码:qwer 下载解压至phpstudy的WWW目录下即可。 第一…...
LeetCode面试题Day6|LeetCode238 除自身以外数组的乘积、LeetCode134 加油站
题目1: 指路: . - 力扣(LeetCode)238 除自身以外数组的乘积 思路与分析: 除去自身元素求其他元素的乘积,或许第一反应会是数组元素积乘再除以遍历到的元素,定义一个结果数组再对应放结果值&…...
猫头虎分享:Python库 FastAPI 的简介、安装、用法详解入门教程
🐯 猫头虎分享:Python库 FastAPI 的简介、安装、用法详解入门教程 🚀 📄 摘要 作为一名专注于Python和人工智能开发的技术博主,猫头虎经常在开发过程中遇到各种挑战。最近,有粉丝问到如何高效地构建API&a…...
python连接MySQL数据库使用pymysql
开头 经过这么一段时间的学生信息管理系统的摸爬滚打,不断的学习更新的知识,不断修改自己的认知,针对pymysql以及MySQL数据库的知识做个总结,以纪念我这段时间的学习。 目录 开头 pymysql的使用流程 1.导入pymysql的工具包 方…...
AI时代下的编程趋势:程序员如何提升核心竞争力
随着人工智能和机器学习技术的飞速发展,大型语言模型和AI生成代码(AIGC)工具如ChatGPT、Midjourney、Claude等层出不穷,AI辅助编程逐渐成为现实。在这一变革的浪潮中,程序员群体面临着前所未有的挑战和机遇。一些人担忧…...
C#:基本语法
写在前面 本人在实习过程需要用C#进行开发,但本人之前的技术栈是C方向,所以在菜鸟教程上速通了一下C#的基本语法,总的来说和C还是非常相似的。 1 关键字 using关键字:使用命名空间class:使用类 2 注释 /* 这个程序…...
Redisson 实现分布式锁
文章目录 Redisson 是什么Redisson 使用客户端模式单节点模式哨兵模式主从模式集群模式Spring Boot 整合 Redisson 中的锁Redisson 可重入锁Redisson 公平锁Redisson 联锁Redisson 读写锁Redisson Redlock Redisson 的看门狗机制RedLock 解决单体故障问题如何使用 RedLockMarti…...
VMware ESXi学习笔记
esxi网络模型: 物理网卡: 一般会有多个物理网卡,用于管理口和其他(vsan) 虚拟交换机:创建虚拟交换机时,会要求选择至少1个上行链路(物理网卡) 端口组:一般一个虚拟交换机会创建两个端口组,一个虚机使用&a…...
Python 函数(2)
2、函数 2.1、函数传递列表 将列表传递给函数后,函数就能直接访问其内容。 下列为一个实例:将一个名字列表传递给一个名为greet_users()的函数,这个函数将会向列表中的每一个元素执行相应的信息。 def greet_users(name):for name in name…...
c++文件的读写
平常我们在编完代码后,基本都是从键盘输入,从屏幕输出(显示),但可不可以从其他地方输入输出呢? ………………………………………………………………………………………………………………… 其实可以&…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
