Stl:
Algorithm:
1. min(a,b) a和b的类型要一样
2. max(a,b) a和b的类型要一样
3. swap(a,b) a和b的类型要一样
4. sort(a,b)左闭右开,拍完序之后,使得数组从1到n从小到大排序。{自定义函数:sort(a,b,cmp)使得a到b从大到小排序}(定义cmp从大到小)。
5. unique:去重。但是想要用这个函数,必须先排序。这个函数有返回值,比如在输出完四个不同的数后,它会返回z+5.也就是说 不同的数的个数=unique(z+1,z+n+1)-z-1.
6. reverse:翻转:12345到54321.
7. random_shuffle:打乱。
8. next_ permutation:沿着全排列从上到下依次走。
9. prev_permutation:沿着全排列从下到上依次走。
10. map<int,int> m;(可以用map搞出无限大的数组)
a) 第二个int代表数组里面的元素是什么类型的
b) 第一个int说的是数组下标是什么类型的。
c) 如果已经对map的n个位置赋了值,那么再进行操作,时间复杂度为lg n。
d) map实现二维数组:
i. map<int,map<int,int>> mm;
11. C++实数会有误差,所以我们用这样的方法判断两个数是否相同。
这里的例子是判断8位就足够了。
12. Pair(二元组):
a)
数据结构
1. 数组:查询很快,插入和删除很慢。
2. 链表:1.插入和删除很快,查询很慢。
3. 栈:从同一个口出和放。FILO:first in last out.
a) 手写栈(现阶段)。
b) <stack>栈头文件。
i. stack<int> sta(sta可换成别的)
1. sta.push,sta.pop,sta.top,sta.size(求多少个元素)。
4. 队列:从不同的口出和放。FIFO:first in first out.
a) Stl:<queue>头文件
b) queue<int>
i. que.push
ii. que.pop
iii. que.front
iv. que.size
5. 堆
a) Push:放东西(大根堆/小根堆)
i. Pop:扔最大的东西
ii. Top:询问最大的元素是多少。
iii. Pop:扔最小的东西
iv. Top:访问最小的元素是多少
b)
i. Priority_queue:优先队列(堆)。
1. C++中Priority实现的堆永远是大根堆。
2. 求小根堆,就把输入的元素加负号,使得最大的数(即未加负号前最小的数)扔掉。