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; 

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

相关推荐

  1. C# freesql技术 常用增删改查sql命令

    2024-03-10 01:42:04       56 阅读
  2. c#常用修饰符

    2024-03-10 01:42:04       59 阅读
  3. C++常用

    2024-03-10 01:42:04       42 阅读
  4. C++常见STL容器基本用法

    2024-03-10 01:42:04       61 阅读
  5. C++STL---list常见用法

    2024-03-10 01:42:04       34 阅读
  6. 常用数据库SQL语句使用大全

    2024-03-10 01:42:04       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 01:42:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 01:42:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 01:42:04       82 阅读
  4. Python语言-面向对象

    2024-03-10 01:42:04       91 阅读

热门阅读

  1. webpack打包一个文件,做了哪些事情

    2024-03-10 01:42:04       36 阅读
  2. k8s发布nacos-server,nodeport配置注意事项

    2024-03-10 01:42:04       51 阅读
  3. 【LeetCode的使用方法】讲解

    2024-03-10 01:42:04       49 阅读
  4. python脚本批量关闭exe文件

    2024-03-10 01:42:04       39 阅读
  5. 用 reduce 实现 map 的功能

    2024-03-10 01:42:04       48 阅读
  6. 【C#语言入门】13. 表达式、语句详解(3)

    2024-03-10 01:42:04       50 阅读
  7. 基于单片机的输液监测系统设计与实现

    2024-03-10 01:42:04       41 阅读