一、stack的简介
- stack是一种容器适配器,专门用在后进先出操作的上下文中环境中,其中的元素只允许从容器固定的一端进行插入和删除操作。
- stack是作为容器适配器来实现的,容器适配器是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,元素是从特定容器的尾部被压入和弹出,即栈顶。
- stack的底层容器可以是任何标准的容器类模版或者一些其他特定的容器类,这些容器都应该支持以下的操作:
1. empty:判空操作
2. back:获取尾部元素操作
3. push_back:尾部插入元素操作
4. pop_back:尾部删除元素操作 - 标准容器vector、deque、list都符合这些需求,在默认情况下,stack指定特定的底层容器为deque
二、stack的使用
template <class T, class Container = deque > class stack;
函数说明 | 接口说明 |
---|---|
stack() | 构造空的栈 |
empty() | 检测stack是否为空 |
size() | 返回stack中元素的个数 |
top() | 返回栈顶元素的引用 |
push() | 将元素val压入stack中 |
pop() | 将stack中尾部的元素弹出 |
bool empty() const;
size_type size() const;
value_type& top();
const value_type& top() const;
void push (const value_type& val);
void pop();
代码实现:
void TestStack1()
{
stack<int, vector<int>> st;
//stack<int, list<int>> st;
//stack<int> st;
st.push(1);
st.push(2);
st.push(3);
st.push(4);
st.push(5);
st.push(6);
cout << "stack中的元素个数:" << st.size() << endl;
while (!st.empty())
{
cout << st.top() << " ";
st.pop();
}
}
三、stack的模拟实现
namespace hxj
{
template<class T,class Container=vector<T>>
class stack
{
public:
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_back;
}
T& top()
{
return _con.back();
}
const T& top()
{
return _con.back();
}
size_t size()
{
return _con.size();
}
bool empty()
{
return _con.empty();
}
private:
Container _con;
};
}