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