【C++初阶】容器适配器模拟实现栈和队列(附源码)

简介: 【C++初阶】容器适配器模拟实现栈和队列(附源码)

一.容器适配器

其实在使用模板时,我们不仅可以使用类模板,还可以使用容器模板,这就是一个容器适配器,我们可任意给模板实例化不同的容器,然后就可以使用容器里的接口

template<class T,class Containers>

我们知道,栈可以用数组实现也可以用链表实现,以前在C语言那里,如果我们想要两个底层不同的栈,要么写两个栈,要么用typedef,但这做不到自由控制;在C++中,我们可以容器适配器解决这个问题,数组链表秒切换。

注意使用的接口必须是你实例化的容器所拥有的,否则会报错

例:

 vector容器没有头插(push_front)和头删(pop_front)接口

 list却有这两个接口,所以在使用时要特别注意。


二.模拟实现stack

库里栈的模板是这样的,这个deque是一个双端队列,它同时拥有vector和list的接口

 

上图是栈的接口,都很简单,栈符合先进后出,下面就让我们用容器适配器模拟实现栈吧。

 

源码

1. template<class T,class Containers=deque<T>>  //容器适配器
2.  class stack   //栈
3.  {
4.  public:
5.    void push(const T& val)   //入栈,即尾插
6.    {
7.      _con.push_back(val);
8.    }
9. 
10.     void pop()   //出栈,即尾删
11.     {
12.       _con.pop_back();
13.     }
14. 
15.     const T& top() const  //取栈顶元素
16.     {
17.       return _con.back();
18.     }
19. 
20.     bool empty()
21.     {
22.       return _con.size() == 0;
23.     }
24. 
25.     size_t size() const
26.     {
27.       return _con.size();
28.     }
29.   private:
30.     Containers _con;
31.   };

三.模拟实现queue

队列和栈差不多,但队列是先进先出原则

源码

1. template<class T,class Containers=deque<T>>
2.  class queue   //队列
3.  {
4.  public:
5.    void push(const T&val)   //入队列,即尾插
6.    {
7.      _con.push_back(val);
8.    }
9. 
10.     void pop()   //出队列,即头删
11.     {
12.       _con.pop_front();
13.     }
14. 
15.     T& front()   //取队列的第一个元素
16.     {
17.       return _con.front();
18.     }
19. 
20.     const T& front() const
21.     {
22.       return _con.front();
23.     }
24. 
25.     bool empty()
26.     {
27.       return _con.size() == 0;
28.     }
29. 
30.     size_t size() const
31.     {
32.       return _con.size();
33.     }
34.   private:
35.     Containers _con;
36.   };

🐬🤖本篇文章到此就结束了, 若有错误或是建议的话,欢迎小伙伴们指出;🕊️👻

😄😆希望小伙伴们能支持支持博主啊,你们的支持对我很重要哦;🥰🤩

😍😁谢谢你的阅读。😸😼


目录
相关文章
|
2月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
59 2
|
2月前
|
算法 C++
|
2月前
|
算法 C++
【算法单调栈】 矩形牛棚(C/C++)
【算法单调栈】 矩形牛棚(C/C++)
|
5月前
|
存储 C++ 索引
|
5月前
|
存储 C++ 容器
|
5月前
|
算法 数据处理 C++
|
5月前
|
存储 安全 C++
|
5月前
|
C++ 索引 容器
|
5月前
|
存储 算法 C语言
【C++】详解STL的适配器容器之一:优先级队列 priority_queue
【C++】详解STL的适配器容器之一:优先级队列 priority_queue