虚拟机做网站有用吗,手机网站变灰,24小时有效地址域名,去哪找人做网站#x1f440;樊梓慕#xff1a;个人主页 #x1f3a5;个人专栏#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》
#x1f31d;每一个不曾起舞的日子#xff0c;都是对生命的辜负 前言
stack与queue的实现比较简…
樊梓慕个人主页 个人专栏《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》
每一个不曾起舞的日子都是对生命的辜负 前言
stack与queue的实现比较简单本篇不会有太大的篇幅但值得我们学习的是『 适配器』的概念。 欢迎大家收藏以便未来做题时可以快速找到思路巧妙的方法可以事半功倍。 GITEE相关代码fanfei_c的仓库 1.适配器
stack与queue并不属于容器而是『 适配器』。
适配器其实就是对已经存在的容器进行封装得到的。
在STL标准库中stack与queue的底层默认使用deque容器。 deque我们本篇文章不介绍大家只需要知道他类似于vector与list并且deque具有他们两个容器的特性即可。 适配器就像是我们的充电器我国家庭电路电压为220v但却可以通过不同的电源适配器达到不同的功率。 模板参数的这一用法我们上篇文章提到过
当我们不传模板参数时stack与queue都默认使用deque容器来构建栈或者队列但我们也可以自己设定模板参数就如同之前学习『 数据结构』时栈或者队列既有顺序结构也有链式结构一样在『 C』中我们只需要设定模板参数即可实现顺序栈、顺序队列或者链栈、链队列这就体现出了模板参数的妙用。 2.模拟实现源码
2.1stack
templateclass T, class Container dequeT
class stack
{
public:void push(const T x){_con.push_back(x);}void pop(){_con.pop_back();}const T top(){return _con.back();}size_t size(){return _con.size();}bool empty(){return _con.empty();}private:Container _con;
}; 2.2queue
templateclass T, class Container dequeT
class queue
{
public:void push(const T x){_con.push_back(x);}void pop(){_con.pop_front();}const T front(){return _con.front();}const T back(){return _con.back();}size_t size(){return _con.size();}bool empty(){return _con.empty();}private:Container _con;
}; 2.3如何实现底层基于vector或list的栈或队列呢
其实非常简单就是将对应的模板参数设定为vector或list即可比如
int main()
{stackint,vectorint s;s.push(1);s.push(2);s.push(3);s.push(4);while (!s.empty()){cout s.top() ;s.pop();}cout endl;return 0;
} 另外注意 函数参数传参是在『 使用时传参』传递的是『 对象』模板参数传参是在『 编译时传参』传递的是『 类型』。