做淘宝客网站要不要备案,免费微信小程序商城,成都网站建设思乐科技,个人购物网站怎么做前言
前面实现了string和vector#xff0c;理所应当就该轮到stack和queue啦#xff0c;本篇还会涉及到一个比较重要且听起来很厉害的概念——适配器模式
适配器模式
在之前数据结构初阶的学习过程中#xff0c;我们学习的栈是由数组加上一些限制组成的容器#xff0c;底…前言
前面实现了string和vector理所应当就该轮到stack和queue啦本篇还会涉及到一个比较重要且听起来很厉害的概念——适配器模式
适配器模式
在之前数据结构初阶的学习过程中我们学习的栈是由数组加上一些限制组成的容器底层本质还是一个数组
队列则是由数组或者链表组成都行再稍加一些限制
所以这里stackqueue的实现也应该复用一下之前学的vector和list
那么该怎么复用呢模板的魅力在这里又体现出来了 这里通过两个模板参数T代表一个空间所存的数据类型Container代表要复用的数据容器
STL库里是用deque去实现stack和queue的但是我们可以传vector或者list去改变底层容器
比如stack int,vectorint queue int,listint
下面这两种虽然看起来和STL库里实现的一样但是底层容器却已经是天差地别了
我们把这种模式就叫做适配器模式——本质其实也就是复用
这是本篇最为核心的知识了解完这些后实现其实也就是复用底层容器的函数接口罢了没啥重点
stack自我实现
templateclass T, class Container dequeT class stack{private:Container _con;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();}};
queue自我实现
templateclass T,class ContainerdequeTclass queue{private:Container _con;public:void push(const Tx){_con.push_back(x);}void pop(){_con.pop_front();}T ftont(){return _con.front();}const T ftont()const{return _con.front();}T back(){return _con.back();}const T back()const{return _con.back();}bool empty(){return _con.empty();}};
———————————————————————————————————————————
本文最重要的是去感悟所谓的适配器复用在后续的priority queue和反向迭代器的实现中也穿插了很多这种思想可以减少代码的冗余性
希望对大家能有所帮助也会继续输入c相关知识