C++是竞争性编程中最推荐的语言之一(请参阅我们的上一篇文章,了解其原因)
C++ STL包含许多可用于不同目的的容器。在本文中,我们将从竞争性编程和面试准备的角度重点介绍最重要的容器。
vector :(#include )动态大小的数组,它允许插入和删除而不关心数组的大小。它还具有纯数组的优点,例如随机访问和缓存友好性。 C++向量支持许多其他操作,例如:ease(),push_front(),insert()等。
队列:(#include )在我们希望具有FIFO项目顺序的情况下很有用。问题示例包括:生成具有给定数字的数字,流中的第一个非重复字符,树及其变化的层级顺序遍历,图形及其变化的BFS。请参阅队列练习问题以获取更多练习。
stack :(#include )用于我们希望获得LIFO订单的情况。示例问题包括平衡括号,股票跨度问题,直方图中的下一个更大的元素和最大的面积。请参阅堆栈练习问题以获取更多练习。
set and map :(#include 和#include
unordered_set和unordered_map :(#include 和#include )这两种方法都通过链接实现散列。当我们希望快速搜索,插入和删除时很有用(所有三个操作均为O(1))。这是该行业中最常用的数据结构之一,也是学术界最低估的数据结构。存在许多流行的问题,计数不同的元素,数组项的频率,具有0和的子数组以及两个未排序数组的并集和交集。请参阅散列练习问题以获取更多实践信息。
priority_queue :(#include )默认实现最大堆。我们也可以创建一个Min Heap。只要我们希望有效地找到最小或最大元素,就使用它。它用于实现流行的算法,例如Prim算法,Dijkstra最短路径,霍夫曼编码,K个最大元素,可购买和合并K个排序数组的最大玩具,流的中位数。请参阅堆练习问题以获取更多练习。
deque : (#include Dequeue支持在O(1)时间两端插入和删除。由于它是使用数组实现的,因此它还允许随机访问。我们可以使用dequeue来实现Queue和Stack两者。双端队列访问所有的汽油泵,以及所有大小为k的子数组的最大值。
在本文的下一部分中,我们将介绍更重要的C++库。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。