前言:本篇文章将对STL(标准模板库)进行一个简单的介绍,以方便在算法竞赛中节省时间并方便使用。
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
C++ 标准模板库的核心包括以下三个组件:
1.容器(Containers)容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。
2.算法(Algorithms)算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
3.迭代器(iterators)迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。
正文
- 1.vector(向量)
与数组类似,都是用来储存元素的一个容器,不同于数组需要定义元组大小,vector在需要进行扩充空间时自动对数据空间进行扩充,类似于golang里面的切片概念。
使用vector 需要使用头文件.
对向量的定义是很简单的,只需要
vector <T> name;//这里的T表示数据类型,name表示向量的名称。
对于vector的访问,有两种方式,一是通过传统的下标访问,与元组类似,从下标0开始访问。另外一种是迭代器来访问,两种访问方式我将在下面介绍
下标访问
for (int i =0;i<n;i++) cout<<name[i]<<" ";
迭代器访问
vector<int>::iterator it=vi.begin();
*(it+i);
for(vector<int>::iterator it=vi.begin();it!=vi.end();it++)
printf("%d ",*it);
//倒序访问
for(auto it=vi.end()-1;it>=vi.begin();it--)
printf("%d ",*it);
对于vector,有很多实用的函数可以直接使用,我在下面直接列出来
1.push_back()
在vector后面添加一个元素。当添加的元素同样是vector时,可以用以下方式表示:
vector<vector<int>> res;
res.push_back({left, right})
2.pop_back()
删除vector的尾元素。
3.size()
获得元素个数
4.clear()
清空vector中的元素
5.insert()
insert(it,x)向vector任意迭代器it前插入一个元素x.
6.erase()
erase(it)删除迭代器为it处的元素
erase(first,last)删除[first,last)内的所有元素。
需要注意的是所有erase的做法会使得iterator无效,除非删除的元素在首尾。
7.resize()
定义好后设置size,如v.resize(n+1)
8.back()
直接得到最后一个元素,可以不用写nums[nums.size()-1]
最后对于vector,万能头<bits/stdc++.h>当中已经包含了相关头文件。