【C++学习第15天】STL

一、种类

  1. vector:变长数组,倍增的思想。给数组申请空间所耗费的时间取决于申请次数,而不是申请空间的大小,即a[1]和a[10000]两个数组的申请时间是基本一致的。
  2. pair<int, string>:存储一个二元组,前后两个变量类型任意。也可以存储多个类型,如pair<int, pair<int, string>>。
  3. string:字符串。操作:substr(), c_str()
  4. queue:队列。操作:push(), front(), pop()
  5. priority_queue:优先队列。操作:push(), top(), pop()
  6. stack:栈。操作:push(), top(), pop()
  7. deque:双端队列。
  8. set, map, multiset, multimap:基于平衡二叉树(红黑树),动态维护有序序列。
  9. unordered_set, unordered_map, unordered_multiset, unordered_multimap:哈希表。
  10. bitset:压位。

二、具体操作

  • 所有STL中的对象均具备:
a.size()
a.empty()
  •  vector:
size()           // 返回元素个数
empty()          // 返回是否为空
clear()          // 清空
front()          // 返回数组的第一个数
back()           // 返回数组的最后一个数
push_back()      // 在数组的末尾插入一个数
pop_back()       // 弹出数组末尾的最后一个数
begin()          // vector的第0个数
end()            // vector最后一个数的后一位数
支持比较运算,如vector<int> a(4, 3), b(3, 4);其中, a < b。
当比较两个vector对象时,实际上是在比较它们的字典序。
vector容器的比较操作符按照元素的顺序进行比较。
它首先比较第一个元素,如果它们相等,则比较第二个元素,以此类推。
  • pair:
first()         // 返回第一个元素
second()        // 返回第二个元素
支持比较运算,以first为第一个关键字,second为第二个关键字,按字典序。
  • string
size()        
empty()
clear()
substr(a, b)        // 返回子串,a表示子串下标,b表示长度;
c_str()             
/*c_str()是C++中的一个字符串成员函数,用于返回一个指向以空字符结尾的字符数组(C风格字符串)的指针。
在C++中,字符串常常使用std::string类来表示。
c_str()函数允许我们将std::string对象转换为C风格字符串的形式,即以const char*的形式表示。*/
  • queue:
size()
empty()
push()            // 向队尾插入一个元素
front()           // 返回队头元素
back()            // 返回队尾元素
pop()             // 弹出队头元素
q = queue<int>()  // 清空queue

值得注意的是,queue没有clear()操作。

  • priority_queue:
push()    // 插入一个元素
top()     // 返回堆顶元素
pop()     // 弹出堆顶元素

默认是大根堆,小根堆定义如下:

priority_queue<int, vector<int>, great<int>> heap;
  • stack:
size()
empty()
push()        // 向栈顶插入一个元素
top()         // 返回栈顶元素
pop()         // 弹出栈顶元素
  • deque(效率较低,用的较少):
size()
empty()
clear()
front()        // 返回第一个元素
back()         // 返回最后一个元素
push_back()    // 在末尾插入一个元素
pop_back()     // 弹出末尾一个元素
push_front()   // 在队首插入一个元素
pop_front()    // 弹出队首一个元素
begin()
end()
  • set(不能有重复元素)/ multiset(可以有重复元素):
size()
empty()
clear()
begin()    // 可++,--
end()insert()
find()
count()        // 返回某一个数的个数
erase()(1) 输入一个数x,删除所有x,时间复杂度:O(k + logn);(2) 输入一个迭代器,删除这个迭代器.
lower_bound(x)    // 返回大于等于x的最小数的迭代器
upper_bound(x)    // 返回大于x的最小数的迭代器
[]              // 时间复杂度是 O(logn)
  • map / multimap
size()
empty()
clear()
begin()
end()insert()        // 插入的数是一个pair
erase()         // 输入的参数是pair或者迭代器
find()
[]              // 时间复杂度是 O(logn)
lower_bound()
upper_bound()
  • unordered_set, unordered_map, unordered_multiset, unordered_multimap, 哈希表

和上面类似,增删改查的时间复杂度是 O(1),而除此之外上面的增删改查的时间复杂度是 O(logn),但支持和排序有关的操作。

不支持 lower_bound() / upper_bound()、迭代器的++和--

  • bitset(压位):
bitset<10000> s;
~ & | ^
>>, <<
==, !=
[]count()    // 返回有多少个1
any()      // 判断是否至少有一个1
none()     // 判断是否全为0
set()      // 把所有位置变成1
reset()    // 把所有位置变成0
flip()     // 等价于~
flip(k)    // 把第k位取反

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/11233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI 图像生成-环境配置

一、python环境安装 Windows安装Python&#xff08;图解&#xff09; 二、CUDA安装 CUDA安装教程&#xff08;超详细&#xff09;-CSDN博客 三、Git安装 git安装教程&#xff08;详细版本&#xff09;-CSDN博客 四、启动器安装 这里安装的是秋叶aaaki的安装包 【AI绘画…

【GlobalMapper精品教程】081:WGS84/CGCS2000转Lambert投影

参考阅读:ArcGIS实验教程——实验十:矢量数据投影变换 文章目录 一、加载实验数据二、设置输出坐标系三、数据导出一、加载实验数据 打开配套案例数据包中的data081.rar中的矢量数据,如下所示: 查看源坐标系:双击图层的,图层投影选项卡,数据的已有坐标系为WGS84地理坐标…

MySQL创建存储过程函数

DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL,userName varchar(20) DEFAULT NULL,pwd varchar(36) DEFAULT NULL,phone varchar(11) DEFAULT NULL,age tinyint(3) unsigned DEFAULT NULL,sex char(2) DEFAU…

[初学rust] 05_ rust struct

rust struct 其实这也算复合类型&#xff0c;但是其他语言都有&#xff0c;所以抽取出来单独看的时候会很简单&#xff0c;更容易学 1. 定义结构体 结构体的定义和其他语言没啥区别。 struct User {name: String,age: i32, }2. 创建实例 创建实例的过程就跟js类似 let us…

【3dmax笔记】021:对齐工具(快速对齐、法线对齐、对齐摄影机)

文章目录 一、对齐二、快速对齐三、法线对齐四、对齐摄影机五、注意事项3dmax提供了对齐、快速对齐、法线对齐和对齐摄像机等对齐工具: 对齐工具选项: 下面进行一一讲解。 一、对齐 快捷键为Alt+A,将当前选择对象与目标对象进行对齐。 最大对最大:

【小笔记】neo4j用load csv指令导入数据

【小笔记】neo4j用load csv指令导入数据 背景 很久没有用load CSV的方式导入过数据了因为它每次导入有数量限制&#xff08;印象中是1K还是1W&#xff09;&#xff0c;在企业中构建的图谱往往都是大规模的&#xff0c;此时通常采用的是Neo4j-admin import方式。最近遇到了一些…

振弦式表面应变计怎么安装

振弦式表面应变计是一种用于测量结构表面应变的高精度传感器&#xff0c;广泛应用于工程和科研领域。正确安装振弦式表面应变计对于确保测量结果的准确性至关重要。以下是安装振弦式表面应变计的步骤和注意事项&#xff1a; 1. 准备工作 在开始安装前&#xff0c;需要准备以下工…

whisper之初步使用记录

文章目录 前言 一、whisper是什么&#xff1f; 二、使用步骤 1.安装 2.python调用 3.识别效果评估 4.一点封装 5.参考链接 总结 前言 随着AI大模型的不断发展&#xff0c;语音识别等周边内容也再次引发关注&#xff0c;通过语音转文字再与大模型交互&#xff0c;从而…

【Gitlab远程访问本地仓库】Gitlab如何安装配置并结合内网穿透实现远程访问本地仓库进行管理

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xf…

为什么质量工程师必学六西格玛?突破职业发展的瓶颈?

在质量管理领域工作多年&#xff0c;你是否曾感受到事业发展的停滞不前&#xff1f;3年、5年的职业生涯&#xff0c;薪水依旧停留在每月5000-7000&#xff0c;而同行业的其他人却能月入2-3万&#xff0c;这种差距让人不禁陷入深思。 问题究竟出在哪里&#xff1f;为什么我们的…

编译OpenResty遇到找不到OpenSSL的解决办法

以OpenResty-1.19.9.1为例 编辑openresty-1.19.9.1/build/nginx-1.19.9/auto/lib/openssl/conf CORE_INCS"$CORE_INCS $OPENSSL/.openssl/include" CORE_DEPS"$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h" CORE_LIBS"$CORE_LIBS $OPENSSL/.…

揭秘图形编程 动静接口如何助力 AGV 集成

在公司软件开发团队的办公室里&#xff0c;阳光透过窗户洒在排列整齐的办公桌上。卧龙坐在办公桌前&#xff0c;面前摊开一份内测报告&#xff0c;他的手指时不时地敲击着桌面&#xff0c;流露出内心的烦躁。他抬起头&#xff0c;眼神中透露出一丝困惑&#xff0c;看向正在文件…

调用函数实现数组的输入排序插入与输出

输入一串数字&#xff0c;输出排序插入后输出最后的数字序列&#xff1b; 把主要步骤交给主函数&#xff0c;通过调用函数来实现整体的功能&#xff1a; 写出主函数&#xff08;这里使用冒泡排序&#xff09;&#xff1a; int main(){int n;int a[10];cin>>n;inputa(a…

【网络安全】【Frida实践案例】某图xx付费功能逆向分析(一)

文章目录 一、目标应用二、环境三、步骤1、查看布局id2、用到的Log日志类信息3、尝试hook VIP判断方法 四、总结五、相关源码 1、文章仅供学习参考&#xff0c;严禁非法使用&#xff01;如非法使用&#xff0c;而导致的一切后果&#xff0c;由使用者自负&#xff01; 2、禁止将…

【C++】string类常用函数用法总结

目录 常用函数一览 默认成员函数 与容量有关的函数 part 1 part 2 part 3 与访问和遍历有关的函数 与修改有关的函数 npos 与string相关的其它常用函数 常用非成员函数 getline和cin的区别 常用函数一览 //默认成员函数 string();string(const char* s);string(si…

猫狗分类识别②图像归一化-位置和重心归一化处理

一、导入库 glob 和 os 都是Python的标准库模块&#xff0c;也就是说它们随Python一起安装&#xff0c;无需额外安装即可使用。 glob 模块提供了一个在目录中使用通配符搜索创建文件列表的函数&#xff0c;例如&#xff0c;可以使用 glob.glob(*.txt) 来查找当前目录下所有的…

Android OpenMAX(七)OMX Service

上一篇文章我们分析了Android使用OMXStore来管理平台上的软件和硬件编解码组件,这一篇我们再向上一层了解应用层是如何获取调用OMXStore管理组件的。本篇文章代码参考自: frameworks/av/services/mediacodec/main_codecservice.cpp frameworks/av/media/libstagefright/omx/1…

Mybatis Plus ActiveRecord 模式

Mybatis Plus ActiveRecord 模式 使用 DEMO源码地址 https://gitee.com/JackSong2019/demo-mybatis3.git 前言 ActiveRecord 模式 简介 ActiveRecord 是一种设计模式&#xff0c;它是一种在软件开发中用于管理关系数据库的模式&#xff0c;他简化了数据库操作的流程&#xf…

docker八大架构之应用服务集群架构

应用服务集群架构 在之前&#xff0c;一个应用层要负责所有的用户操作&#xff0c;但是有时用户增加后就会导致供不应求的现象&#xff08;单个应用不足以支持海量的并发请求&#xff0c;高并发的时候站点响应变慢&#xff09;&#xff0c;这时就需要增加应用层服务器&#xf…

【STM32 |GPIO】GPIO结构、GPIO输出

目录 GPIO简介 GPIO的基本结构 GPIO位结构&#xff08;每一位的具体电路结构&#xff09; 输入 上拉和下拉电阻 斯密特触发器 ​编辑 输出 GPIO模式 ​编辑 浮空输入、上拉输入、下拉输入 模拟输入 开漏输出和推挽输出 复用开漏输出和复用推挽输出 LED和蜂鸣器…