【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.   };

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

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

😍😁谢谢你的阅读。😸😼


目录
相关文章
|
1月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
56 2
|
3月前
|
存储 算法 数据可视化
【C++】C++旅游管理系统(源码+论文)【独一无二】
【C++】C++旅游管理系统(源码+论文)【独一无二】
|
3月前
|
存储 数据可视化 C++
【C++】C++ 职工信息管理系统(源码)【独一无二】
【C++】C++ 职工信息管理系统(源码)【独一无二】
|
3月前
|
存储 数据可视化 C++
【C++】C++-机房收费管理系统(源码+注释)【独一无二】
【C++】C++-机房收费管理系统(源码+注释)【独一无二】
|
3月前
|
数据可视化 C++
【C++】C++商店销售管理系统(源码+论文)【独一无二】
【C++】C++商店销售管理系统(源码+论文)【独一无二】
|
3月前
|
C++
【C++】C++书店管理系统(源码+论文)【独一无二】
【C++】C++书店管理系统(源码+论文)【独一无二】
|
3月前
|
存储 C++ 索引
【C++ 】C++ 停车场收费系统(源码)【独一无二】
【C++ 】C++ 停车场收费系统(源码)【独一无二】
|
3月前
|
存储 数据可视化 C++
【C++】C++-学生考试题库管理系统(源码)
本系统设计了一个选题管理流程,包括读取题目信息、随机抽取题目、保存及查询选题结果等功能。使用 `readProjects` 从文件读取题目信息,`drawProject` 随机抽取未选中的题目,`saveSelection` 保存选题结果至文件,`querySelection` 查询并显示所有选题结果。主函数提供菜单界面,支持学生信息输入、抽题及结果查询。关注【测试开发自动化】公众号,回复“题库”获取源码。
26 0
|
3月前
|
存储 数据可视化 C++
【C++】C++-学生考试题库管理系统(源码)【独一无二】
【C++】C++-学生考试题库管理系统(源码)【独一无二】
130 0
|
3月前
|
算法 数据可视化 C++
【C++】C++ 学生信息管理系统(源码+面向对象)【独一无二】
【C++】C++ 学生信息管理系统(源码+面向对象)【独一无二】
下一篇
无影云桌面