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.hqwc.cn/news/522959.html

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

相关文章

社区店选址标准:如何选择适合你业务的理想位置

选址是实体店成功的关键因素之一&#xff0c;而社区店更是要紧密结合社区的特点来选择。 作为一名鲜奶吧开店5年的创业者&#xff0c;我将为大家分享一些实用的社区店选址标准。 1、社区类型&#xff1a; 首先要明确你的目标客户群体&#xff0c;然后选择与之匹配的社区类型…

办公电脑换成MacBookPro半年之后……

小白是从2008年开始接触电脑的&#xff0c;当时朋友给我注册的第一个QQ账号是2008年4月。 从此&#xff0c;小白一直认为电脑全部都是Windows系统。直到上大学那年&#xff0c;看到了外教老师的MacBookPro…… 折腾电脑的开始居然是起源于诺基亚手机&#xff0c;给半智能S40的…

python三剑客之一——Numpy

温故而知新&#xff0c;借着工作需要用到Numpy的机会重新学习一遍Numpy。 Numpy是一个运行速度非常快的数学库&#xff0c;主要用于数组计算&#xff0c;包含如下&#xff1a; 一个强大的N维数组对象ndarray【Nd&#xff08;Dimension维度&#xff09;array】 广播功能函数 整…

瑞_Redis_短信登录(一)

文章目录 项目介绍1 短信登录1.1 项目准备1.1.1 导入SQL1.1.2 导入后端项目1.1.3 导入前端项目 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《Redis》的实战篇的短信登录章节的项目准备小节。由于博主是从B站黑马程序员的《Redis》学习其相关知识&#xff0c;所以本系…

Androidstudio实现登录按钮按下变色

在activity_main.xml中&#xff0c;写如下代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"androi…

个性化科研服务 | 付费分析试营业正式启动啦!定制你的专属生信分析!可提供1v1答疑!

之前在 干货满满 | 给生信小白的入门小建议 | 掏心掏肺版 中有提到&#xff0c;如果小伙伴们真的想学好生信&#xff0c;那编程能力是必须要有的&#xff01;但是可能有些小伙伴们并没有那么多的时间从头开始学习编程&#xff0c;又或是希望有人指导或者协助完成生信分析工作&a…

微信小程序(五十四)腾讯位置服务示范(2024/3/8更新)

教程如下&#xff1a; 上一篇 1.先在官网注册一下账号&#xff08;该绑定的都绑定一下&#xff09; 腾讯位置服务官网 2.进入控制台 3.创建应用 3. 额度分配 4.下载微信小程序SDK 微信小程序SDK下载渠道 5.解压将俩js文件放在项目合适的地方 6.加入安全域名or设置不验证合…

Kafka MQ 生产者和消费者

Kafka MQ 生产者和消费者 Kafka 的客户端就是 Kafka 系统的用户&#xff0c;它们被分为两种基本类型:生产者和消费者。除 此之外&#xff0c;还有其他高级客户端 API——用于数据集成的 Kafka Connect API 和用于流式处理 的 Kafka Streams。这些高级客户端 API 使用生产者和消…

STM32基础--构建自己的固件库

CMSIS 标准及库层次关系 因为基于 Cortex 系列芯片采用的内核都是相同的&#xff0c;区别主要为核外的片上外设的差异&#xff0c;这些差异却导致软件在同内核&#xff0c;不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的 Cortex 微控制器软件的兼容性问题&#xff0…

【牛客】HJ87 密码强度等级 CM62 井字棋

题目一:密码强度等级 题目链接&#xff1a;密码强度等级_牛客题霸_牛客网 (nowcoder.com) 本题主要考察C语言中逻辑分支语句&#xff0c;基本语句以及对各种特殊字符 &#xff0c;ASCII值以及条件表达中的逻辑运算符关系运算符各自功能的理解&#xff0c;以及基本使用&#x…

网站开发之旅:从概念到实现

在我成为一名专业的网站开发者的过程中&#xff0c;我有幸参与了多个激动人心的项目。其中&#xff0c;一个我印象尤为深刻的经历是&#xff0c;开发一个名为“文案推荐网”的主题网站&#xff08;www.zimeiti.love&#xff09;。这个项目不仅让我深入了解了网站开发的各个方面…

#欢迎各位学者,研究员,单位前来参会,一同交流经验技术,探讨行业领域发展方向,组队参会更优惠!

#欢迎各位学者&#xff0c;研究员&#xff0c;单位前来参会&#xff0c;一同交流经验技术&#xff0c;探讨行业领域发展方向&#xff0c;组队参会更优惠&#xff01; 第六届下一代数据驱动网络国际学术会议&#xff08;NGDN 2024&#xff09; The Sixth International Confere…