STL队列和栈
0x01 栈
1 |
先记录一下栈stack。
和数据结构教材讲的性质基本一致,这里记录一下STL实现栈的方法。
1 | stack<typename T, typename Container = deque<T>> |
栈的类模板,第一个参数是存储对象的类型,第二个参数是底层容器的类型。
还有一个swap函数,swap(stack
访问栈:
1 | deque<int> data{0,1,2,3,4}; |
0x02 队列
1 |
stack和queue这类模板在初始化时,都默认封装了一个deque
这里顺便记录一下emplace是什么吧,我当时看的时候也不懂,看这个例子就完全明白了
也有赋值运算符重,也有swap函数,也有拷贝构造函数。
1 | list<int> data_{0,1,2,3}; |
这里补充一下,list容器类似于链表,deque容器类似于vector,但是是双端数组,可以对头部进行插入和删除。具体操作再看。
栈和队列两种模板默认封装deque容器,更利于头尾的修改。
0x03 堆(优先队列)
优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的。他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队。
1 | priority_queue<Type, Container, Functional> |
Type就是数据类型,Container就是容器类型,STL里默认vector。Functional就是比较的方式(是一个仿函数,重载了括号),默认大顶堆
1 | //升序队列(小顶堆) |
如果你用的不是int这种基本数据类型,比如比较两个类,那么就要填入自己重载后的运算符了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 北海の小站!