西安网站建设聂卫,营销型网站结构图,威海百度seo,网站备案图片前言
写这篇博客目的是为了记录在刷算法题中使用过的STL#xff0c;因为有些不太常用的会遗忘。这篇博客只是作为笔记#xff0c;不是详细的STL#xff0c;因此只会对常用方法说明#xff0c;不会详细介绍。此外在后面用到新的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()获取数组长度
例如代码
#includebits/stdc.h
using namespace std;
int main(){vectorint a;for(int i0;i10;i)a.push_back(i);a.pop_back();for(int i0;ia.size();i){couta[i] ;}coutendla.size();
}结果是
这里经常配合使用的方法是**unique(a,b)**该方法是将重复元素移动到数组尾部参数分别是开始和结束部分迭代器。返回不重复部分最后一个元素的迭代器。
集合
集合特点是自动排序并且集合没有重复元素。集合没有提供按元素查找方式可以通过迭代器实现具体实现看这篇博客。
基础集合
基础集合是set 该集合不允许出现重复元素出现相同元素会被覆盖。默认按照升序排序。也可以指定排序方式。
方法说明size()集合元素个数insert()插入元素empty()集合是否为空find()查找元素返回迭代器
#includebits/stdc.h
using namespace std;
struct cmp{bool operator()(const inta,const intb){if(ab)return false;return true;}
};//定义的排序方法
int main(){setint,cmp m; //按照定义进行排序setint::iterator iters;m.insert(1);m.insert(9);itersm.begin();cout*iters ;coutm.size();
}结果是
9 2可重复集合
可重复集合是multiset该集合区别是可以重复存储相同元素。不会覆盖除此之外方法等和set基本没什么区别。
映射
映射是map映射通过键值对一一映射从而可以快速查询数据。一般来说使用时和数组差不多。没什么很多方法如果一个键值对不存在并查询一个不存在的键时如果值类型是整形则其值等于0
#includebits/stdc.h
using namespace std;
int main(){mapint,int m;m[1]100;m[2];coutm[1] m[2] m[3]endl;
}结果为
pair
pair是将两个数据组成一个元素其中这两个数据类型可以是不同类型。主要通过first访问第一个数据元素通过second访问第二个数据元素。
#includebits/stdc.h
using namespace std;
int main(){pairint,char a;a.first4;a.seconda;couta.first a.second;
}结果为
迭代器
迭代器类似于指针对于上述数据类型。都可以获取其相应的迭代器。如果c版本够高可以直接使用auto接收返回的迭代器。不过我的c版本太低只能自己定义。其定义方式是数据类型::iterator 迭代器名.具体如下如下
定义一个mapint,int名为iters的迭代器:
mapint,int::iterator iters在上述类型中一般使用如下获取相应迭代器
方法说明begin()指向第一个元素迭代器end()最后的迭代器
这两个方法是通用的有些数据类型也提供其他放回迭代器的方法例如set的find()方法返回一个指向目标元素的迭代器。迭代器访问是通过*迭代器变量名。 迭代器向前移动可以通过方法advance(iterssteps)参数分别是迭代器名和向前移动步数。
#includebits/stdc.h
using namespace std;
int main(){dequeint a;dequeint::iterator iters; //dequeint类型迭代器for(int i0;i10;i){a.push_back(i);}itersa.begin(); //获取指向第一个元素的迭代器for(int i0;ia.size();i){cout*iters ;advance(iters,1); //迭代器向前移动一个元素}
}结果为 删除方法是erase()该方法将迭代器指向元素删除并将后面元素向前移动。 例如代码
#includebits/stdc.h
using namespace std;
int main(){dequeint a;dequeint::iterator iters; for(int i0;i10;i){a.push_back(i);}itersa.begin();a.erase(iters);itersa.begin();cout*itersendl; 结果为