😇 😇大家好,我是bug!今天我们来讲讲容器适配器:
(代码可能会有一点问题,请各位老铁指正 😘 😘 )
容器适配器
🍉 🍉容器适配器:简单可以理解为通过对不适用的容器进行封装处理,将不适用的序列式容器(包括 vector、deque 和 list)变得适用。
🍉 🍉可以这样认为,容器配置器不会要求底层容器的种类,只要求底层的容器可以支持适配器的功能。(不同的容器效率也不一样)
一、stack
🌹 🌹 栈: 又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
🌵🌵常用接口:
函数 | 用法 |
---|---|
stack() | 构造空的栈 |
empty() | 检测stack是否为空 |
size() | 返回stack中元素的个数 |
top() | 返回栈顶元素的引用 |
push() | 将元素val压入stack中 |
pop() | 将stack中尾部的元素弹出 |
🍒 🍒模拟实现⬇️ ⬇️:
#include<iostream>
#include<queue>
using std::cin;
using std::cout;
using std::endl;
using std::deque;
namespace lz
{
template<class T,class Container = deque<T>>
class stack
{
private:
Container _con;
public:
stack()
:_con()
{
}
//入栈,出栈
void push(const T& val) {
_con.push_back(val); }
void pop() {
if (empty()) return; _con.pop_back(); }
//元素个数,判空
size_t size() {
return _con.size(); }
bool empty() {
return size() == 0; }
//栈顶数据(可修改和不可修改)
T& top(){
return _con.back();}
const T& top()const {
return _con.back(); }
};
}
#include"stack.h"
void Test_stack()
{
//默认容器:双端队列
lz::stack<int> s1;
s1.push(1);
s1.push(2);
s1.push(3);
s1.push(4);
while (!s1.empty())
{
cout << s1.top() << endl;
s1.pop(