PS:基于语法基础课,总结STL笔记
1. #include<vector>
感觉跟数组类似
1.1 声明
#include<vector>
vector<int> a;//类型为int的变长数组,命名为a
vector<char> b(10);//类型为char的数组,长度为10,命名为b
vector<int> c(10,1);//初始化10个值为1的数组,类型为int,命名为b
vector< vector< int> >d;//二维数组
1.2 增加
a.push_back(x)//在数组的最后添加一个数据x
1.3 删除
a.pop_back()//在数组的最后弹出一个数据
a.clear();//清除所有数据
1.4 排序
sort(a.begin(),b.end());//从小到大排序
sort(a.begin(),b.end(),greater<int>());//从大到小排序
/*
sort 需要头文件 #include <algorithm>
a.begin()返回数组头指针
a.end()返回数组的最后一个单元+1的指针
a.front()返回数组的第一个元素值
a.back()返回数组的最后一个元素值
*/
1.5 大小
a.size();//当前使用数据的大小
1.6 判断是否为空
a.empty();//判断是否为空
1.7 访问
//一维数组访问
vector<int> a;
//顺序访问
for(int i=0;i<10;i++) a.push_back(i);
//数组访问
for(int i=0;i<10;i++) cout<<a[i]<<" ";
1.8 二维数组
int n=5,m=6;
vector<vector<int>> a(n);//定义一个5行的动态二维数组
//定义数组
for(int i =0; i< a.size(); i++)//5行6列的二维数组,值全为0
{
a[i].resize(m);//resize这个函数我还不是很懂
}
//读取数组
for(int i=0;i<a.size();i++)//输出二维动态数组
{
for(int j=0;j<a[i].size();j++) cout<<a[i][j]<<" ";
}
for(int i=0;i<a.size();i++)
{
for(int j=0;j<a[i].size();j++) cout<<a[i][j]<<" ";
}
2. #include<queue>
队列,先进先出,尾进头出,常用于BFS
2.1 循环队列queue
2.1.1 声明
#include<queue>
queue<int> a;//类型为int的变长数组,命名为a
2.1.2 增加
a.push(x);//在队列尾部插入一个元素x
2.1.3 删除
a.pop();//从队列头部弹出一个元素
2.1.4 访问
a.front();//获得队头元素
a.back();//获得队尾元素
//访问之前一定要检查队列是否为空
a.empty();
2.1.5 个数
a.size();//返回队列内元素的个数
2.2 优先队列priority_queue
2.2.1 声明
#include<queue>
priority_queue<int> q;//大根堆
priority_queue<int,vector<int>,greater<int>> q;//小根堆
2.2.2 查询堆顶元素
a.top();//查询堆顶元素,大根堆返回最大值,小根堆返回最小值
其他操作和循环队列相同
3. #include<stack>
3.1 常用操作
(懒得按照之前的写法写了,直接写常用写法)
#include<stack>
stack<int> q;
int x;
q.push(x);//在栈顶插入x
q.pop();//删除栈顶的元素
q.top();//返回栈顶的元素值
q.size();//返回元素个数
q.empty();//检查栈是否为空,若为空则返回true,不为空则返回false
[HTML_REMOVED],[HTML_REMOVED]这些还没学会,后面再补上吧