本文简要总结了在刷题和编程过程中常常用到的STL库的一些数据结构和算法。
一. 容器
1. stack
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stack>
//定义
stack<int> st;
//stack拥有的一些方法
//堆栈为空则返回真
st.empty()
//移除栈顶元素
st.pop()
//在栈顶增加元素
st.push()
//返回栈顶元素
st.top()
//返回栈中元素数目
st.size()
2. vector
(1) 初始化方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vector>
//初始化
vector<int> v;
//初始化大小
vector<int> v(n);
//初始化值
vector<int> v(n, value);
vector<int> v {1,2,3,4,5};
vector<int> v={1,2,3,4,5};
//使用vector初始化
vector<int> v2;
vector<int> v(v2);
vector<int> v = v2;
vector<int> v(v2.begin(), v2.end());
//二维数组初始化
vector<int, vector<int>> v_2d(m, vector<int >(n))
(2)常用方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <vector>
vector<int> v;
//在容器最后新加一个元素
v.push_back();
//在iterator前新加一个元素
v.push_back(v.begin(), x);
//在iterator前新加一个元素
v.push_back(v.begin(), x);
//删除向量中迭代器指向元素
v.erase(iterator it);
//删除向量中[first,last)中元素
v.erase(iterator first,iterator last);
//删除向量中最后一个元素
v.pop_back();
//清空向量中所有元素
v.clear();
//判断是否为空
v.empty();
//数组大小
v.size();
//返回pos位置元素的引用
reference at(int pos)
//返回首元素的引用
v.front();
//返回尾元素的引用
v.back();
//返回向量头指针,指向第一个元素
v.begin();
//返回向量尾指针,指向向量最后一个元素的下一个位置
v.end();
//反向迭代器,指向最后一个元素
v.rbegin();
//反向迭代器,指向第一个元素之前的位置
v.rend();
3. map
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <map>
//初始化
map<int, int> m;
//插入元素
m.insert(pair<int,int>(1,10))
m[1] = 1
//删除元素
it=Map.begin();
m.erase(it); //通过迭代器删除
m.erase(k); //通过键值删除
m.clear()
m.erase(m.begin(), m.end())
//键值对数量
m.size()
4. queue
1
2
3
4
5
6
#include <queue>
//初始化
queue<int, int> q;
//方法基本与stack一致
//还可以使用优先队列
priority_queue<T>q;
二. 算法
1. sort
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <algorithm>
//数组排序
int a = {1,2,3,4,5}
sort(a, a + 5)
//vector排序
vector<int > a{1,2,3,4,5};
sort(a.begin(), a.end())
//以上排序默认是从小到大,自定义排序需要指定比较函数
bool cmp(T v1, T v2){
return v1 > v2;
}
vector<T> a{1,2,3,4,5};
sort(a.begin(), a.end(), cmp)
原创作品,转载请注明来源 https://hebicheng.github.io