容器适配器
stack和queue有一点需要注意的是,虽然stack和queue中也可以存放元素,但在STL中并没将起划分到容器的行列,而是将起称为容器适配器,这是因为stack和queue只是对其他容器进行包装,STL中stack和queue默认使用queue容器.
在stack和queue的类模板声明中我们就可以看到,他们的模板参数有两个,第一个是stack和queue当中存储的元素类型,而另一个就是使用的容器类型,当我们不指定的情况下使用的是deque容器.
stack的模拟实现:
实现的接口如下:
template<class T,class Container = std::deque<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() const
{
return _con.back();
}
size_t size()
{
return _con.size();
}
bool empty()
{
return _con.empty();
}
void swap(stack<T,Container> &st)
{
std::swap(_con,st._con);
}
private:
Container _con;
};
queue的模拟实现:
实现的接口:
template<class T,class Container = deque<T>>
class queue
{
public:
void push(const T x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_fornt();
}
const T& front()
{
return _con.front();
}
T& front()
{
return _con.front();
}
const T& back()
{
return _con.back();
}
T& back()
{
return _con.back();
}
size_t size()
{
return _con.size();
}
bool empty()
{
return _con.empty();
}
void swap(queue<T, Container> q)
{
std::swap(_con, q._con);
}
private:
Container _con;
};