c++ 常用的STL

前言

写这篇博客目的是为了记录在刷算法题中使用过的STL,因为有些不太常用的会遗忘。这篇博客只是作为笔记,不是详细的STL,因此只会对常用方法说明,不会详细介绍。此外在后面用到新的STL内容时会再补充。

列队

基础列队

基本列队是queue,其中主要有入队、出队、读取队尾或则队首元素、获取队列长度这几个方法。

方法说明
pop()删除首元素
push()添加一个元素
front()获取队首元素
back()获取队尾元素
size()队列长度
empty()判断是否为空

这里是基础列队queue,有的时候在写算法时为了满足某些需要。需要队列可以弹出队尾元素。这里queue并没有提供相应的方法,当然如果需要可以使用迭代器的 erase() 方法,该方法目的是删除某个元素,并将后面元素前移。

双端操作列队

这里可以使用修改版的列队deque,该列队提供了更加多样的操作,使得列队可以在任何端进行插入和删除操作。这里deque相比于vector优势是速度快一点。

方法说明
pop_front()删除队首元素
pop_back()删除队尾元素
push_front()队首添加一个元素
push_back()队尾添加一个元素
front()获取队首元素
back()获取队尾元素
size()队列长度
empty()判断是否为空

向量数组

向量数组vector,向量数组相比于传统的数组,优势在于其长度可以动态扩展,而不必一开始就规定数组大小。并直接提供了队尾添加删除操作。

方法说明
pop_back()删除尾元素
push_back()向尾部添加一个元素
front()获取首元素
back()获取尾元素
size()队列长度
empty()获取数组长度

例如代码:

#include<bits/stdc++.h>
using namespace std;
int main(){vector<int> a;for(int i=0;i<10;i++)a.push_back(i);a.pop_back();for(int i=0;i<a.size();i++){cout<<a[i]<<' ';}cout<<endl<<a.size();
}

结果是:
在这里插入图片描述

这里经常配合使用的方法是**unique(a,b)**该方法是将重复元素移动到数组尾部,参数分别是开始和结束部分迭代器。返回不重复部分最后一个元素的迭代器。

集合

集合特点是自动排序,并且集合没有重复元素。集合没有提供按元素查找方式,可以通过迭代器实现,具体实现看这篇博客。

基础集合

基础集合是set 该集合不允许出现重复元素(出现相同元素会被覆盖)。默认按照升序排序。也可以指定排序方式。

方法说明
size()集合元素个数
insert()插入元素
empty()集合是否为空
find()查找元素,返回迭代器
#include<bits/stdc++.h>
using namespace std;
struct cmp{bool operator()(const int&a,const int&b){if(a<b)return false;return true;}
};//定义的排序方法
int main(){set<int,cmp> m;		//按照定义进行排序set<int>::iterator iters;m.insert(1);m.insert(9);iters=m.begin();cout<<*iters<<' ';cout<<m.size();
}

结果是

9 2

可重复集合

可重复集合是multiset,该集合区别是可以重复存储相同元素。不会覆盖,除此之外方法等和set基本没什么区别。

映射

映射是map,映射通过键值对一一映射,从而可以快速查询数据。一般来说使用时和数组差不多。没什么很多方法,如果一个键值对不存在,并查询一个不存在的键时,如果值类型是整形,则其值等于0

#include<bits/stdc++.h>
using namespace std;
int main(){map<int,int> m;m[1]=100;m[2]++;cout<<m[1]<<' '<<m[2]<<' '<<m[3]<<endl;
}

结果为:
在这里插入图片描述

pair

pair是将两个数据组成一个元素,其中这两个数据类型可以是不同类型。主要通过first访问第一个数据元素,通过second访问第二个数据元素。

#include<bits/stdc++.h>
using namespace std;
int main(){pair<int,char> a;a.first=4;a.second='a';cout<<a.first<<' '<<a.second;
}

结果为
在这里插入图片描述

迭代器

迭代器类似于指针,对于上述数据类型。都可以获取其相应的迭代器。如果c++版本够高可以直接使用auto接收返回的迭代器。不过我的c++版本太低只能自己定义。其定义方式是数据类型::iterator 迭代器名.具体如下如下:

定义一个map<int,int>名为iters的迭代器:
map<int,int>::iterator iters

在上述类型中一般使用如下获取相应迭代器

方法说明
begin()指向第一个元素迭代器
end()最后的迭代器

这两个方法是通用的,有些数据类型也提供其他放回迭代器的方法,例如set的find()方法,返回一个指向目标元素的迭代器。迭代器访问是通过*迭代器变量名
迭代器向前移动可以通过方法advance(iters,steps)参数分别是迭代器名和向前移动步数。

#include<bits/stdc++.h>
using namespace std;
int main(){deque<int> a;deque<int>::iterator iters; //deque<int>类型迭代器for(int i=0;i<10;i++){a.push_back(i);}iters=a.begin();			//获取指向第一个元素的迭代器for(int i=0;i<a.size();i++){cout<<*iters<<' ';advance(iters,1);		//迭代器向前移动一个元素}
}

结果为
在这里插入图片描述
删除方法是erase()该方法将迭代器指向元素删除,并将后面元素向前移动。
例如代码

#include<bits/stdc++.h>
using namespace std;
int main(){deque<int> a;deque<int>::iterator iters; for(int i=0;i<10;i++){a.push_back(i);}iters=a.begin();a.erase(iters);iters=a.begin();cout<<*iters<<endl; 

结果为;
在这里插入图片描述

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

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

相关文章

【python】time库知识整理

简介 python的time库是python内置库&#xff0c;主要负责处理与时间相关的事务。 获取当前时间 函数作用time()获取当前时间戳ctime()获取字符串形式的时间gmtime()调用内部方法&#xff0c;赋予属性&#xff0c;能够被程序调用执行 time返回的是时间戳 ctime是返回的我们…

MPU6050详解

文章目录 前言MPU6050简介MPU6050参数 硬件电路MPU6050框图电荷泵的原理 内部时钟生成需要使用的寄存器&#xff08;常用&#xff09;采样率划分器配置寄存器陀螺仪配置寄存器加速度计配置寄存器加速度计测量寄存器温度测量寄存器陀螺仪测量寄存器电源管理1寄存器电源管理2寄存…

Tomcat实现java博客项目、状态页及常见配置介绍

目录 一、自建博客 1. 项目背景 2. 操作示例 二、状态页 1. 概述 2. server status 信息状态页 3. manager app 项目管理状态页 4. host manger 虚拟主机管理状态页 三、常见配置 1. 端口8005/tcp安全配置管理 2. tomcat端口号 3. 虚拟主机设置 4. Context配置 一…

R语言自定义颜色

一、创建颜色梯度&#xff08;渐变色&#xff09; 在绘热图时&#xff0c;需要将数值映射到不同的颜色上&#xff0c;这时就需要一系列的颜色梯度colorRampPalette 函数支持自定义的创建一系列的颜色梯度。 代码示例&#xff1a; library(RColorBrewer)x <- colorRampPal…

【kubernetes】关于k8s集群的pod控制器

目录 一、deployment控制器 二、statefulset控制器 1、验证数据可以持久化 2、验证删除后名称不会改变&#xff0c;数据还会一直存在 3、验证扩容的创建过程是升序串行执行&#xff0c;并且自动创建pv 4、验证滚动更新的时候也是升序执行&#xff0c;数据持久化还在 5、验…

【排序算法】深入理解归并排序算法:从原理到实现

目录 1. 引言 2. 归并排序算法原理 3. 归并排序的时间复杂度分析 4. 归并排序的应用场景 5. 归并排序的优缺点分析 5.1 优点&#xff1a; 5.2 缺点&#xff1a; 6. Java、JavaScript 和 Python 实现归并排序算法 6.1 Java 实现&#xff1a; 6.2 JavaScript 实现&…

A5自媒体wordpress主题模板

一个简洁的wordpress个人博客主题&#xff0c;适合做个人博客&#xff0c;SEO优化效果挺不错的。 https://www.wpniu.com/themes/204.html

什么是ETL?什么是ELT?怎么区分它们使用场景

在大数据处理的领域中&#xff0c;ETL和ELT是两个经常被数据工程师提到的工具&#xff0c;而有很多数据工程师对这两种工具的区别和使用和定位有一定的模糊&#xff0c;其实它们分别代表了两种不同的数据集成方法。尽管这两种方法看起来都是从源系统提取数据&#xff0c;转换数…

2024AI在医疗领域中的辅助趋势与现有进展

2024 年 AI 辅助研发趋势随着人工智能技术的持续发展与突破&#xff0c;2024年AI辅助研发正成为科技界和工业界瞩目的焦点。从医药研发到汽车设计&#xff0c;从软件开发到材料科学&#xff0c;AI正逐渐渗透到研发的各个环节&#xff0c;变革着传统的研发模式。在这一背景下&am…

rabbitmq 基本总结

rabbitmq 的基本概念 vhost、broker、producer、 consumer、 exchange、 queue、 routing key rabbitmq 常用的队列类型&#xff0c;工作队列&#xff08;简单队列&#xff09;,pub/sub, routing key&#xff0c; topic 模式 <dependency><groupId>com.rabbitmq&l…

启动项目报502怎么处理呢?

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

蓝桥杯练习系统(算法训练)ALGO-982 最小距离

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 最小距离 问题描述 数轴上有n个数字&#xff0c;求最近的两个数&#xff0c;即min(abs(x-y)) 输入格式 第一行包含一个整数n。   …

Redis的Lua脚本

Redis提供了Lua脚本功能&#xff0c;在一个脚本中编写多条Redis命令&#xff0c;确保多条redis命令执行时的原子性。&#xff08;让判断线程标识和释放锁原子执行&#xff09; 1.下载lua插件 2.创建lua文件 3.调用lua脚本 public void unlock() {//调用lua脚本原子性的判断线…

CSS中元素的层叠顺序

层叠顺序&#xff0c;英文称作 stacking order&#xff0c;表示元素发生层叠时有着特定的垂直显示顺序。下面是盒模型的层叠规则&#xff1a; 对于上图&#xff0c;由上到下分别是&#xff1a; &#xff08;1&#xff09;背景和边框&#xff1a;建立当前层叠上下文元素的背景…

【Qt】四种绘图设备详细使用

绘图设备有4个: **绘图设备是指继承QPainterDevice的子类————**QPixmap QImage QPicture QBitmap(黑白图片) QBitmap——父类QPixmapQPixmap图片类&#xff0c;主要用来显示&#xff0c;它针对于显示器显示做了特殊优化&#xff0c;依赖于平台的&#xff0c;只能在主线程…

Linux系统——web服务拓展练习

目录 一、实验环境搭建 1. Centos 7-5——Client 2. Centos 7-1——网关服务器 3. Centos 7-2——Web1 4. Centos 7-3——Web2 5. Centos 7-4——Nginx 二、在Nginx服务器上搭建LNMP服务&#xff0c;并且能够对外提供Discuz论坛服务&#xff1b;在Web1、Web2服务器上搭建…

数据集下载汇总

国家数据网 https://data.stats.gov.cn/ 国家数据是国家统计局发布统计信息的网站&#xff0c;包含了我国经济、民生、农业、工业、运输、旅游、教育、科技、卫生等多个方面的数据&#xff0c;并且在月度、季度、年度都有覆盖&#xff0c;较为全面和权威&#xff0c;对于社会…

【数据库-黑马笔记】基础-函数和约束

本文参考b站黑马数据库视频,总结详细全面的笔记 ,可结合视频观看27~36集 MYSQL 的基础知识框架如下 目录 一、 函数 1、字符串函数 2、数值函数 3、日期函数 4、流程函数 5、小结: 二、约束 1、概述 2、 约束演示 3、外键约束 4、外键删除更新行为 5、小结: …

如何查看自己电脑显卡的内存

ctrlaltdelete 打开任务管理器&#xff0c;然后打开性能页面,你会看到一个GPU内存&#xff0c;这个是自己GPU的内存&#xff0c;也叫专用GPU内存&#xff0c;而那个共享GPU 内存是不够用的时候借用电脑的内存。 下面是专用GPU内存和共享GPU内存的具体区别 专用GPU内存和共享GPU…

HarmonyOS 数据持久化 关系型数据库之 增删改逻辑编写

好 上文 HarmonyOS 数据持久化 关系型数据库之 初始化操作 我们讲了 关系型数据库初始化 那么 本文 我们来编写 增删改 相关代码 打开我们的项目 打开到 我们之前写的这个 relationalClass 类 然后 我们在 initTaskDB 下面再定义一个函数 叫 addTask 的函数 用来执行添加逻辑 …