栈(stack)
栈从潜在容器的尾部将元素推入,也是将元素从潜在容器的尾部将元素移除。栈可以看成一个没有前门,只有后门的房子。从后门进去之后,后进去的人就会先从后门出来。
队列(queue)
队列将元素push到潜在容器的尾部,从潜在容器的前部弹出。队列可以看成是一个验票的地方,票验完之后直接就上车了。
所以先进先出。First in First out.
优先队列详解
优先队列定义于 https://cplusplus.com/reference/queue/ 这个头文件中。该头文件存在两个容器类,一个是queue, 另一个是priority_queue. 第一个是先进先出队列,第二个是优先队列。
优先队列是一类容器适配器(container adaptor), 专门设计来使得**它的第一个元素总是它所包含的“最优先“的那个元素,**优先的标准某种strict weak ordering 标准(严格弱序列标准)。
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
上述是priority_queue的模板类定义。Compare提供了”优先”的定义。
关于Compare: 如果Compare的第一个参数位于第二个参数的前面,则返回true. 例如上述模板类的默认参数是std::less ,即数字小的位于前面,而优先队列的的第一个(front)元素是最大的元素,故在compare函数中位于前面的元素实际上后输出。即队列的front包含了根据Compare所规定的弱排序的位于后边的元素。仍然以less为例,2<3, 2位于3的前面。 故2后输出。可以形象地记忆为:位于小于号左边的人先来,先来的人在售票大厅门口等着,将前面的位置留给后来的德高望重的人。