提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
容器适配器
什么是容器适配器呢?虽然stack和queue也可以存放数据,但是STL并没有将他们两个纳入容器行列,而是stack和queue是在其他容器的基础上面进行了包装,STL中stack和queue的底层容器是deque容器。
我们观察一下stack和queue的模板参数:
第二个缺省参数,当没有指定的容器传入的时候,那么就是用deque作为底层实现容器。
也就是说,stack和queue既可以用顺序表实现,也可以用链表实现,但是如果你在Container中传入的是vector 那么stack就是对vector容器进行的包装
stack的模拟实现
stack的功能函数:
模拟实现代码:
//stack的模拟实现
namespace std
{
template<class T,class Container = std::deque<T>>
class stack
{
public:
//入栈
void push_back(const T& x)
{
_con.push_back(x);
}
//出栈
void pop()
{
_con.push_back();
}
//获取栈顶的元素
T& Top()
{
return _con.back();
}
const T& Top()const
{
return _con.back();
}
//栈中元素个数
size_t size()
{
return _con.size();
}
bool empty()const
{
return _cno.empty();
}
void swap(stack<T, Container>& st)
{
std::swap(st._con);
}
private:
//容器
Container _con;
};
}
queue的模拟实现
queue的功能函数:
模拟实现代码:
//queue的模拟实现
namespace std
{
template<class T, class Container = std::deque<T>>
class queue
{
public:
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_front();
}
//获取队头的数据
T& front()
{
return _con.front();
}
const T& front()const
{
return _con.front();
}
//获取元素个数
size_t size()
{
return _con.size();
}
//获取队尾的数据
T& back()
{
return _con.back();
}
const T& back()const
{
return _con.back();
}
//判断是否为空
bool empty()const
{
return _con.empty();
}
//交换
void swap(queue<T, Container>& st)
{
std::swap(st._con);
}
private:
Container _con;
};
}
如有错误, 多多指教!