一、stack
我们查看stack原文档会发现和之前的list和vector之类的模板参数有些不同
说明:
- 容器适配器:stack不是自己直接管理数据,而是通过其他容器管理数据,再通过其他容器的基础之上再封装转换出我们需要的数据。
- stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下几项操作:
- empty:判空操作
- back:获取尾部元素操作
- push_back:尾部插入元素操作
- pop_back:尾部删除元素操作 - 标准容器vector、deque、list均符合这些需求,默认情况下,如果没有为stack指定特定的底层容器,默认情况下使用deque。
stack默认适配容器deque构造
//“int”可以是任意类型
stack<int> st;
stack使用特定适配器构造
//"int"可以为任意类型
queue<int, vector<int>> q2;
queue<int, list<int>> q3;
栈的模拟实现:
stack主要实现的函数接口:
namespace goat
{
template<class T , class Container = std::deque<T>>
class stack
{
public:
void push(const T& x)
{
return _con.push_back();
}
void pop()
{
return _con.pop_back();
}
const T& top()
{
return _con.back();
}
bool empty()
{
return _con.empty();
}
size_t size()
{
return _con,size()
}
private:
Container _con;
};
}
stack的常用接口
二、queue
队列和栈一样用的都是容器适配器
queue常用接口
queue模拟实现
queue模拟接口:
template<class T, class Container = std::deque<T>>
class queue
{
public:
void push(const T& x)
{
return _con.push_back(x);
}
void pop()
{
return _con.pop_front();
}
const T& front()
{
return _con.front();
}
const T& back()
{
return _con.back();
}
bool empty()
{
return _con.empty();
}
size_t size()
{
return _con.size();
}
private:
Container _con;
};