c++ 常用的STL

news2024/9/23 13:22:54

前言

写这篇博客目的是为了记录在刷算法题中使用过的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.coloradmin.cn/o/1502798.html

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

相关文章

YOLOv8-Seg改进:特征融合篇 | GELAN(广义高效层聚合网络)结构来自YOLOv9

🚀🚀🚀本文改进:使用GELAN改进架构引入到YOLOv8 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何训练YOLOv8-seg; 2)模型创新,提升分割性能; 3)独家自研模块助力分割; 1.YO…

申请公众号上限是多少

一般可以申请多少个公众号&#xff1f;公众号申请限额在过去几年内的经历了很多变化。对公众号申请限额进行调整是出于多种原因&#xff0c;确保公众号内容的质量和合规性。企业公众号的申请数量从50个到5个最后到2个&#xff0c;对于新媒体公司来说&#xff0c;这导致做不了公…

基于深度视觉实现机械臂对目标的识别与定位

机械臂手眼标定 根据相机和机械臂的安装方式不同&#xff0c;手眼标定分为眼在手上和眼在手外两种方式&#xff0c;双臂机器人的相机和机械臂基座的相对位置固定&#xff0c;所以应该采用眼在手外的手眼标定方式。 后续的视觉引导机械臂抓取测试实验基于本实验实现&#xf…

CentOS 7 devtoolset编译addressSanitizer版本失败的问题解决

在我的一个Cent OS7开发环境中&#xff0c;按https://yeyongjin.blog.csdn.net/article/details/134178420的方法升级GCC版本到8.3.1。 这两天&#xff0c;要用Google的addressSanitizer检验内存问题&#xff0c;加上编译参数后&#xff0c;却发现编译不通过。configure时直接退…

微服务韧性工程:利用Sentinel实施有效服务容错与限流降级

目录 一、雪崩效应 二、Sentinel 服务容错 2.1 Sentinel容错思路 2.2 内部异常兼容 2.3 外部流量控制 三、Sentinel 项目搭建 四、Sentinel 工作原理 服务容错是微服务设计中一项重要原则和技术手段&#xff0c;主要目标是在服务出现故障、网络波动或其他不可预见的异常情况…

5G 网络切片VLAN ID配置错误导致业务不可用

【摘要】随着电联5G共建共享工作的开展&#xff0c;无法及时有效观测到单逻辑站点的相关指标&#xff0c;导致单运营商用户业务出现异常。本案例中着重对单运营商用户无法使用网络进行相关参数排查&#xff0c;从KPI性能指标结合故障告警发生时间&#xff0c;从而分析由于网络切…

Web APIs 5 Window对象、本地存储

Web APIs 5 一、Window对象1、BOM2、定时器-延时函数3、JS执行机制4、location对象案例&#xff1a;5秒钟之后跳转的页面 5、navigator对象6、histroy对象 二、本地存储本地存储 localStorage本地存储 sessionStorage存储复杂数据类型案例&#xff1a;学生就业统计表字符串拼接…

光致发光谱荧光量子效率测量系统

荧光量子积分球是一个专门用于测量荧光量子效率的设备。荧光量子效率是指物质吸收光后所发射的荧光光子数与所吸收的激发光光子数之间的比值。这种设备通过比较待测荧光物质和已知荧光量子产率的参比物质&#xff0c;在相同激发条件下所测得的积分荧光强度&#xff08;即校正的…

微信小程序实现上拉加载更多

一、前情提要 微信小程序中实现上拉加载更多&#xff0c;其实就是pc端项目的分页。使用的是scroll-view&#xff0c;scroll-view详情在微信开发文档/开发/组件/视图容器中。每次上拉&#xff0c;就是在原有数据基础上&#xff0c;拼接/合并上本次上拉请求得到的数据。这里采用…

搜狐新闻Hybrid AI引擎端侧离线大语言模型探索

本文字数&#xff1a;3027字 预计阅读时间&#xff1a;20分钟 01 一、导读 • LLM 以及移动平台落地趋势 • 搜狐AI引擎内建集成离线可运行的GPT模型 • Keras 定制预训练模型 • TensorFlow Lite converter 迁移到移动设备 02 二、LLM 1.1什么是LLM L…

HTML入门:属性

你好&#xff0c;我是云桃桃。今天来聊一聊 HTML 属性写法和特点。 HTML 属性是用于向 HTML 标签&#xff08;也叫 HTML 元素&#xff09;提供附加信息或配置的特性。 如果说&#xff0c;把HTML 标签比作一个房子&#xff0c;HTML 标签定义了房子的结构和用途&#xff0c;比如…

蓝桥杯之【01背包模版】牛客例题展示

牛客链接 #include <bits/stdc.h> using namespace std; int n,V; const int N1010; int v[N],w[N]; int dp[N][N]; int main() {cin>>n>>V;for(int i1;i<n;i){cin>>v[i]>>w[i];}for(int i1;i<n;i){for(int j1;j<V;j){dp[i][j]dp[i-1][…

idea远程服务器debug

前提 本地代码和服务器代码一致 idea中创建远程服务 一般只需要修改ip&#xff0c;注意这边的端口是监听Socket的端口&#xff0c;不是服务的端口 然后把运行参数复制一下 -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 tomcat启动 在tomcat的lib下的c…

OJ_二叉排序树

题干 C实现 循环双指针法(一个指向父亲&#xff0c;一个指向待插入结点) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <queue> using namespace std;struct TreeNode {char data;TreeNode* left;TreeNode* right; };void InsertBST(TreeNode* …

扩展黄永刚原始晶体塑性程序加入AF背应力模拟金属疲劳问题

参考文献&#xff1a;《Low-cycle fatigue life prediction of a polycrystalline nickel-base superalloy using crystal plasticity modelling approach》 在原始程序中修改流动方程&#xff0c;加入背应力项&#xff0c;引入运动硬化项&#xff0c;从而可以描述多晶金属循环…

智慧公厕系统的运作过程

智慧公厕是一种新型的未来城市公共厕所&#xff0c;通过物联网、互联网、大数据、云计算、自动化控制等技术&#xff0c;实现公共厕所使用、运营、管理、养护的全过程全方位信息化。 那么&#xff0c;智慧公厕是如何运作的&#xff1f;智慧公厕的运作过程包括什么技术&#xf…

悬浮工具球(仿 iphone 辅助触控)

悬浮工具球&#xff08;仿 iphone 辅助触控&#xff09; 兼容移动端 touch 事件点击元素以外位置收起解决鼠标抬起触发元素的点击事件问题 Demo Github <template><divref"FloatingBal"class"floating_ball":class"[dragging, isClick]&q…

【Docker4】使用Harbor搭建私有仓库

Docker私有仓库一、搭建本地私有仓库1、daemon.json 配置文件中常用配置项2、搭建私有仓库3、Docker容器重启策略 二、Docker--harbor私有仓库部署与管理1、Harbor 简介2、Harbor的特性3、Harbor的构成4、Harbor 部署4.1、部署 Docker-Compose 服务4.2、部署 Harbor 服务4.3、启…

OJ_判断两序列是否为同一二叉搜索树序列

题干 C实现 求出两棵树的中序和先序序列对比中序和先序序列是否相同 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string> #include <queue> using namespace std;struct TreeNode {char data;TreeNode* left;TreeNode* right; };void …

day17_订单(结算,提交订单,支付页,立即购买,我的订单)

文章目录 订单模块1 结算1.1 需求说明1.2 获取用户地址1.2.1 UserAddress1.2.2 UserAddressController1.2.3 UserAddressService1.2.4 UserAddressMapper1.2.5 UserAddressMapper.xml 1.3 获取购物项数据1.3.1 CartController1.3.2 CartService1.3.3 openFeign接口定义 1.4 环境…