stack的主要成员变量
stack是一个适配器容器。
适配器:用已有的容器来创建新的容器,例如用vector就可以实现stack。
在这里我们比没有直接用vector,而是用了一个模板Container,这样我们就可以通过传不同的容器来实现stack(默认给的容器是deque),这样就不仅限于只使用vector来实现。
template<class T,class Container=deque<T>>
class stack
{
public:
//各种成员函数
//....
private:
//vector<T> _CON;//不要直接写vector,如果这样写,就只能实现数组栈,我们应该写一个模板参数,这样就可以传入不同的容器,实现不同的栈
Container _con;//为写构造函数,自定义类型调用默认构造函数。
};
empty
判断stack是否为空
bool empty()const
{
return _con.empty();
}
size
返回stack的大小
size_t size()const
{
return _con.size();
}
push
插入一个元素,因为是stack,所以调用_con的尾插方法
void push(const T& val)
{
_con.push_back(val);
}
top
返回栈顶元素
const T& top()const
{
return _con.back();
}
pop
出栈
void pop()
{
_con.pop_back();
}
queue的主要成员变量
queue也是一个适配器容器,所用的容器也是一个模板参数,默认传deque。
template<class T,class Container=deque<T>>
class queue
{
public:
//各种成员函数
//........
private:
Container _con;
};
queue的模拟实现与stack类似,这里就直接给出全部代码。
template<class T,class Container=deque<T>>
class queue
{
public:
bool empty() const
{
return _con.empty();
}
size_t size()const
{
return _con.size();
}
const T& front()const
{
return _con.front();
}
const T& back() const
{
return _con.back();
}
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_front();
}
private:
Container _con;
};