人生苦短,我要面向对象。
Warning:找不到对象
STL容器的真正含义:啊!是大佬(ShiTaLao——方言)!我死了(WSL)
最简单的STL是vector,简单到不能再简单了。
其中vector的insert功能很好地模拟了链表的插入操作,虽然vector的本质是数组。
(但是写一个数组的插入岂不是很繁?人生苦短啊)
例如:
OJ编号263:jhljx又来了。
OJ编号266:AZY学习顺序表。
OJ编号290:KevinFeng写作文。
看吧,vector的insert功能就是这么方便。一般如果我们需要对一个数组(或者链表)里面执行插入操作,请使用vector来减少代码量。
DQ冰淇淋?
栈和队列都好写,因为它们都是单向增长或移动的。但是双端队列就不太好写了。这时候,我们需要合理运用deque的武器呢。
(如果您非要开大空间从中间计数,或者取模,我也拦不住对吧。)
来跟我一起念!PO-RI-O-RI-TI-KYU!(罗马音:ポリオリティキュ!)
是的。如果你不把第一个连读音节拆开念的话,一定会忘记打一个字母小r的。这可是惨痛的教训啊——
优先队列的本质是一个堆(二叉树),并且是大顶堆。与其他STL不同,数据结构课用的不多,但是在算法课上最经常用到。
在诸多算法里都会用优先队列来优化算法,尤其是贪心算法,在各种贪心算法中都会见到。比如著名的最短路Dijkstra。
在这里就不写了。参见广度优先搜索_bfs_与标数最短路_dijkstra。
这个文中也提到,如何将默认大顶堆转换为小顶堆呢?取相反数存储与读取就完了。这是个很经典的技巧,相比之下在定义中修改优先级略为难记。
不过一定要记得读取的时候也要取相反——存的时候是反着存的,很容易忘。
对于带结构体的优先队列,如果不想引入大小判定符号,也没有字典序这种糟糕的条件,就嵌套使用pair吧!默认结构体pair的优先级默认是先比较first再比较second,省得再写难记的大小判定了!