C++STL特殊容器stack
stack的基本性能
stack准确的说并不是STL framework所提供的容器,而是一个为了满足特殊需求而设计的容器。属于容器适配器(container adapter),它提供了简单而清晰的接口满足我们对数据结构堆栈的需求。
对于stack(也称LIFO,后进先出),我们可以使用 push()将任意数量的元素放入stack内,也可以使用 pop()将元素以其插入的反序从容器中移除。
上图可以很形象的看出,我们的压入顺序是A->B,待到我们弹出时的顺序就变成了B->A。
stack使用须知
1.包含头文件
1 #include<stack>
2.在头文件<stack>中,class stack 定义如下
1 namespace std
2 {
3 template <typename T,
4 typename Container = deque<T>>
5 class stack;
6 }
第一个template参数代表元素类型,带有默认值的第二个template参数用来定义stack内部存放元素的实际容器,默认为deque。
很多人问为什么不用vector,具体原因可能是dequ有移除元素时会自动释放内存,并且不必在重新分配reallocation时复制全部元素的优点。
3.我们可以自定义stack的内部容器
stack的实现只是很单纯的把各项操作转化为内部容器的对应调用,事实上,你可以使用任何sequence容器支持stack,只要它们提供函数:back()、push_back()、pop_back。
举个栗子
1 stack<int> st; //定义一个int类型内部为deque的stack
2 stack<int,vector<int>> st; //定义一个int类型内部为vector的stack
stack核心操作
1.核心接口成员函数
1 st.push();//将一个元素放入stack内
2 st.top();//返回stack内的“下一个”元素
3 st.pop();//从stack中移除元素
注意,pop弹出栈顶元素但不返回它,top返回栈顶元素但不移除它。两者在stack为空时使用会造成不明确的行为,所以在使用前可以采用 empty() 来检验stack是否为空
2.常用函数
1 st.size(); //返回stack内元素数量
2 st.empty(); //返回容器是否为空
3.comparison的重载
stack支持两个相同类型间的比较(比较原则是字典序),从栈底元素开始比较
comparison可以是下列任何运算:==、 !=、 >=、 <=、 >、 <。
本文主要针对的是竞赛方向的stack使用,没有涉及更深度的使用,若有错误,请提出指正。
如果能帮助到您,我会非常开心QWQ
2019-01-31