STL
- vector
- set
- string
- map
- queue
- priority_queue
- stack
- pair
- algorithm
vector
【一种自动改变数组长度的数组】
*在面对图论时候,vector作为一种特殊的数据结构,可以以邻接表的方式存储图。
1.定义
Vector<类型名> 变量名; 类型名可以是int,char这种常见的,也可以是自己定义的类型 struct
注意,当定义二维vector数组时,可以
@vector<vector<int> > name;
@vector<int> array[SZIE];
这两种方式都能实现二维的vector,但是前者一维二维的长度都是可以动态增加的,而后者只有二维的长度可以增加。
2.访问方式
@下标访问 ve [ i ]
@用迭代器访问 vector<类型名>::iterator 变量名;
注意,迭代器可以理解为stl类型的指针。正如普通的指针指向不同类型元素时候只需要改变指针的类型,迭代器指向不同stl元素的时候也只需要改变迭代器的类型。
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> v;
for (int i = 0; i < 5; i++)
{
v.push_back(i);
}
//v.begin()返回v的首元素地址
vector<int>::iterator it=v.begin();
for (int i = 0; i < v.size(); i++)
{
cout<<it[i]<<" ";
}
return 0;
}
不过,我们更常见用:
for (vector<int>::iterator it=v.begin(); it!=v.end();it++) { cout<<*it<<" "; }
3.vector自带函数
@push_back() 向vector末尾插入
@pop_back() 末尾弹出
@size() 返回vector元素个数,O(1)的时间复杂度
@clear() 清空
@insert() 在指定位置插入,insert(pos,x)
@erase() 删除指定位置或区间的元素,erase(pos)
4.为什么要vector
我们在很多场景会遇到一组不知道长度的数据,在这种情况下,vector可以动态的帮助我们减少空间的占用。
Set
【一个内部自动有序且不含重复元素的容器】
1.定义
set<类型名> 变量名; 和vector定义一样,有多种类型可以自主选择
2.元素访问
不同于vector,set只能用迭代器访问
Set<类型>::iterator it;
用*it 来访问set内的元素。
#include<iostream> #include<set> using namespace std; int main(){ set<int> st; st.insert(5); st.insert(2); st.insert(6); st.insert(2); for(set<int>::iteratorit =st.begin(); it != st.end(); it++){ cout<<*it<< endl; } return 0; }
输出:
2
5
6
注意,这里的输出是2,5,6的原因是因为set自动帮我们去除了重复元素,并且自动递增排序了。
3.set常用函数
@insert() 插入元素
@find() find(value),返回该值在容器内的地址
@erase() 删除单个元素或一个区间的所有元素
注意,我们对set容器进行操作都是按照地址的,所以这里传入的参数也应该是迭代器,st.erase(it),st.erase(it, st.end());
*一个方法可以删除指定value的元素
#st.erase(st.find(value));#
@size() 返回set内元素的个数。
4.为什么要set
当我们有要求对一组数据进行去重并排序时,set是一个非常有用的数据结构。